Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   IDE – Debugger-Anzeige komplexer Datenstrukturen? (https://www.delphipraxis.net/210910-ide-%96-debugger-anzeige-komplexer-datenstrukturen.html)

Andreas13 28. Jun 2022 15:58

IDE – Debugger-Anzeige komplexer Datenstrukturen?
 
Hallo Community,
ich arbeite viel mit der Multipräzisions-Arithmetik-Bibliothek MPA (mp_real.pas) von unserem leider viel zu früh verstorbenen Gammatester: http://web.archive.org/web/*/wolfgang-ehrhardt.de und https://github.com/maelh/www.wolfgang-ehrhardt.de

Dort (in BTypes.pas und mp_types.pas) werden komplexe Datenstrukturen deklariert und von den Routinen in mp_real.pas benutzt. Ich komme damit schon seit vielen Jahren ganz gut zurecht, habe nur folgendes „Luxusproblem“:

Zum Debuggen muß ich stets eine Print-Anweisung für jede zu inspizierende MPA-Variable, MPA-Array etc. einfügen und das Programm immer neu kompilieren, um die aktuellen Variablen-Werte zu verfolgen, sonst sehe ich im Debugger nur winzige, nichtssagende Bruchstücke der großen Datenstrukturen.
Das ist recht mühselig, zumal selbst der Umgang mit Gammatester’s Routinen bei Leibe nicht einfach ist… Ich würde gerne meine Arbeit etwas erleichtern, daher

meine Fragen:

Wie könnte ich meine lästigen Print-Anweisungen aus dem Quelltext in die IDE „verlagern“, (in den Debugger „integrieren“) damit ich den Inhalt der MPA-Variablen im Debugger sofort sehen kann?

1): Geht es überhaupt?
2): Wie macht man so etwas?
3): Wie groß wäre der Aufwand?

Für jeden Hinweis wäre ich Euch sehr dankbar!

Viele Grüße

Andreas

stahli 28. Jun 2022 16:17

AW: IDE – Debugger-Anzeige komplexer Datenstrukturen?
 
Ich sehe zwei Optionen:

1) CodesiteLogging.Codesite.Send('MyText', MyObject);

Je nachdem, was Du für Objekte mit gibst, kannst Du nachher noch die Eigenschaften einsehen (z.B. StringListen)

2) eigener Visualizer

Du kannst auch eigene Viewer bauen und in der IDE registrieren. Mal hier als Einstieg:
https://www.delphipraxis.net/189852-...ptimieren.html
https://www.delphipraxis.net/206854-...n-threads.html

Andreas13 29. Jun 2022 08:43

AW: IDE – Debugger-Anzeige komplexer Datenstrukturen?
 
Hallo Stahli,

danke für die Infos! :thumb:
Beim ersten Überfliegen der empfohlenen Quellen konnte ich die Vorgehensweise leider (noch) nicht verstehen. :oops: Auch habe ich nicht die in Deinem usoGuidVisualizer.pas https://www.delphipraxis.net/189852-...imieren-2.html aufgeführten Units: soGuid.pas, soInterfaces.pas, CodeSiteLogging.pas, so daß ich es nicht kompilieren kann.

Für mich würde ein ganz simpler Visualizer ohne Objekte reichen, denn ich kann die Variableninhalte stets in Strings umwandeln. Ich müßte lediglich meine Routine MPAF_To_String(..) irgendwie in den Debugger einbinden.

Gibt es nicht einen einfacheren Lösungsweg oder ein konkretes Beispiel für die Benutzung von usoGuidVisualizer?

Danke & Grüße
Andreas

stahli 29. Jun 2022 08:56

AW: IDE – Debugger-Anzeige komplexer Datenstrukturen?
 
Die Units mit "so" und "Guid" sind Units aus meinem Projekt, also meine Datenstrukturen.
Das sollte nur als Beispiel dienen, wie man so einen Visualizer aufbauen kann.

Schau Dir am besten nochmal die Links zum DocWiki und die Hilfestellungen der anderen User an.
Wenn Du so einen Visualizer nutzen möchtest, dann musst Du Dich wohl da etwas durch beißen.
Eine ganz einfache Lösung gibt es offenbar nicht.

dummzeuch 29. Jun 2022 15:27

AW: IDE – Debugger-Anzeige komplexer Datenstrukturen?
 
Theoretisch kann man sich auch Functions bauen, die diese Strukturen als String ausgeben (oder auch in eine Datei schreiben). Diese kann man dann im "Evaluate and Modify"-Dialog der IDE aufrufen. Problematisch dabei ist nur, dass diese Functions gerne vom Linker wegegelassen werden, deshalb muss man dafuer sorgen, dass sie irgendwo auch aufgerufen werden, z.B. in der Initialization Section einer Unit.

Das ist zwar nicht so schön und bequem wie spezielle Visualizer, aber es funktioniert auch mit alten Delphi-Versionen, die die Visualzier-API noch nicht kannten. Und es ist deutlich einfacher zu implementieren.

Edit: Hier ist ein Beispiel:
https://blog.dummzeuch.de/2017/02/15...-for-tdataset/

himitsu 29. Jun 2022 15:34

AW: IDE – Debugger-Anzeige komplexer Datenstrukturen?
 
Man kann auch im Evaluate mehrere Funktionen aufrufen und sich da den String zusammenbauen.

Für eine einmalige "mal kurz gucken"-Sache ist eine Funktion auch schneller/einfacher, als sich erst einen DebugViewer zu bauen und im Delphi zu registrieren.

Andreas13 29. Jun 2022 22:33

AW: IDE – Debugger-Anzeige komplexer Datenstrukturen?
 
Danke Euch allen für Eure Tipps! :thumb:

Allerdings habe ich noch gewisse Probleme:

Zitat:

Zitat von himitsu (Beitrag 1508116)
Man kann auch im Evaluate mehrere Funktionen aufrufen und sich da den String zusammenbauen.

Der Aufruf der stringbildenden Function
Delphi-Quellcode:
MPAF_To_String(..)
funktioniert zwar, erhalte ich jedoch immer den Wert von 0.

Zitat:

Zitat von dummzeuch (Beitrag 1508114)
Theoretisch kann man sich auch Functions bauen, die diese Strukturen als String ausgeben (oder auch in eine Datei schreiben). Diese kann man dann im "Evaluate and Modify"-Dialog der IDE aufrufen. Problematisch dabei ist nur, dass diese Functions gerne vom Linker wegegelassen werden, deshalb muss man dafuer sorgen, dass sie irgendwo auch aufgerufen werden, z.B. in der Initialization Section einer Unit.

Auch das funktioniert unter Verwendung Deiner Unit u_dzDatasetDump.pas, aber der Aufruf
Delphi-Quellcode:
TDataset_Dump(MPAF_To_String(..))
liefert folgende Fehlermeldung: E2010 Inkompatible Typen: 'TDataSet' und 'string'.

Irgendetwas mache ich bestimmt noch falsch...:oops:

Danke & Grüße
Andreas

himitsu 29. Jun 2022 22:52

AW: IDE – Debugger-Anzeige komplexer Datenstrukturen?
 
Die eine Funktion erstellt einen String und gibt ihn zurück
und diesen String willst du wirklich in eine andere Funktion reingeben, welche aber scheinbar ein Dataset haben will?

Andreas13 30. Jun 2022 09:56

AW: IDE – Debugger-Anzeige komplexer Datenstrukturen?
 
Da habe ich wohl Thomas‘ Beispiel https://blog.dummzeuch.de/2017/02/15...-for-tdataset/ fehlgedeutet, denn ich kann nicht mit TDataSets dienen... :oops:
Die MPA-Bibliothek verwendet keinerlei Objekte, weil sie rein prozedural programmiert wurde.

Somit bleibt mir als schnelle Lösung meine bisherige, mit eingestreuten Print-Anweisungen. Alle hier gezeigten Alternativen passen leider nicht zu meinem Problem oder sind Kanonen auf mein "Spätzchen"...

Danke Euch allen für Eure Tipps und Hinweise! :thumb:

Viele Grüße
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz