Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Grundsatzfrage Debuggen mit aktiven Threads (https://www.delphipraxis.net/206854-grundsatzfrage-debuggen-mit-aktiven-threads.html)

stahli 4. Feb 2021 19:48

AW: Grundsatzfrage Debuggen mit aktiven Threads
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich brauche eine recht komplexe Darstellung verschachtelter Interfaces incl. Steuerzeichen usw. und daher ein eigenes Formular (im Bild mal einen ersten Ansatz).

Bin gerade dabei, mir mal ein Plugin aufzubauen. Einen einfachen Visualizer hatte ich schon mal umgesetzt: https://www.delphipraxis.net/189852-...ptimieren.html
Das wird dann jetzt die Formular-Variante.

Die Formular-Umsetzung selbst wird dann aber ähnlich werden, wie die ursprünglich geplante.

stahli 6. Feb 2021 21:39

AW: Grundsatzfrage Debuggen mit aktiven Threads
 
Liste der Anhänge anzeigen (Anzahl: 3)
Ich bin dabei, den Viewer für TStrings für mich umzubauen, komme aber damit nicht klar... :-(
Vielleicht kann mir jemand helfen?

Ich zeige das mal anhand von Screenshots..

1) SpyDetect ist eine Interfacevariable, die ich einsehen möchte. Mit der Lupe kann ich schon mal ein Formular öffnen.

2) Die Werte, die der Viewer erhält sieht man hier.

3) Hier möchte ich die Objekt- oder Interface-Instanz erhalten und direkt alle deren Eigenschaften auslesen.
Also irgendwie so etwas wie
MyIntf := IDetect(ResultAddr)
oder
MyObj := TDetect(ResultAddr)

Gibt es da eine Möglichkeit. Das ist für mich alles nicht so ganz eingängig... :|

stahli 8. Feb 2021 12:45

AW: Grundsatzfrage Debuggen mit aktiven Threads
 
*kleiner Push*

Ich habe mich jetzt nochmal etwas mehr damit beschäftigt.

Da der Viewer für TStringList auch nicht einfach das Objekt referenzieren kann, gehe ich davon aus, dass es dafür generell keine Möglichkeit gibt.
Insofern muss ich wohl den Datenblock wohl auch in eine Datei schreiben und im Viewer wieder aus der Txt generieren und dann diese Datenkopie darstellen.

Delphi-Quellcode:
    // Lösung aus dem StringList-Viewer
    Txt := GetText;
    if Length(Txt) < 4096 then
      StringTextView.Text := FromDbgStrToText(Txt)
    else
    begin
      TempFile := TPath.GetTempFileName;
      try
        GetSaveToFile(TempFile);
        StringTextView.Lines.LoadFromFile(TempFile);
      finally
        DeleteFile(TempFile);
      end;
    end;

Im Grunde also auch wieder so ähnlich, wie ich es über die Socket-Variante gelöst hatte.

Ist das so richtig?

himitsu 8. Feb 2021 13:12

AW: Grundsatzfrage Debuggen mit aktiven Threads
 
Naja, du kannst es ja manuell machen.

Pointer/Referenz der StringList,
da x Bytes offset zum FList
und dann kannst dich da mit ReadProcessMemory durch das Array der Strings kämpfen.

Falls der Compiler "ungenutzte" Variablen weggelassen hat, müsstest du vorher noch die RTTI suchen und dir da den "aktuellen" Offset rausholen.
Die TClass und somit die RTTI sind als erstes in einer ObjektInstanz verlinkt.



Wenn es eine eigene Komponente ist, dann könnte man statt GetMem vom Speichermanager (Delphi oder Windows)
eine MemoryMappedFile nutzen, auf welche man vom Debugger aus zugreifen könnte. (muß man dann nicht direkt im fremden Speicher rumsuchen)

stahli 8. Feb 2021 22:58

AW: Grundsatzfrage Debuggen mit aktiven Threads
 
Danke Euch.

Ich habe es jetzt über eine Textdatei gelöst. Hier ein kleiner, grundsätzlicher Einblick: https://youtu.be/GPEBB9Xa_rc (4 min)

Wenn Interesse besteht, zeige ich gern mehr wenn es fertig ist und stelle es auch gern zur Verfügung.

stahli 10. Feb 2021 17:37

AW: Grundsatzfrage Debuggen mit aktiven Threads
 
Liste der Anhänge anzeigen (Anzahl: 3)
Das Styling komplett ausschalten habe ich nicht geschafft.
Ich weiß ja auch nicht, welche Auswirkungen irgendwelche Eingriffe auf die IDE haben können...

Aber Umschalten auf den Style "Windows" scheint gut zu helfen und keine Probleme zu machen.

Zumindest werde ich jetzt mal damit weiter arbeiten.

Delphi-Quellcode:
function TDebuggeruoDetectVisualizer.Show(const Expression, TypeName, EvalResult: string;
  Suggestedleft, SuggestedTop: Integer): IOTADebuggerVisualizerExternalViewerUpdater;
var
  AForm: TCustomForm;
  AFrame: TuoDetectViewerFrame;
  VisDockForm: INTACustomDockableForm;
begin
  VisDockForm := TuoDetectVisualizerForm.Create(Expression) as INTACustomDockableForm;
  AForm := (BorlandIDEServices as INTAServices).CreateDockableForm(VisDockForm);
  AForm.Left := Suggestedleft;
  AForm.Top := SuggestedTop;
  (VisDockForm as IFrameFormHelper).SetForm(AForm);
  AFrame := (VisDockForm as IFrameFormHelper).GetFrame as TuoDetectViewerFrame;
  AFrame.GeTuoDetect(Expression, TypeName, EvalResult);
  Result := AFrame as IOTADebuggerVisualizerExternalViewerUpdater;

  if Assigned(TStyleManager.ActiveStyle) and (TStyleManager.ActiveStyle.Name <> 'Windows') then
  begin
    TStyleManager.TrySetStyle('Windows'); // <<<===============
  end;
end;

EDIT 1:
- Es hat doch Auswirkungen. Siehe zweiten Screenshot.
- Kann ich für ein Formular das Skinning einfach deaktivieren (ohne etwas am TStyleManager zu machen)?


EDIT 2:
- mit
Delphi-Quellcode:
AForm.StyleName := 'Windows';
im obigen Codeauszug scheint es zu funktionieren
- anbei noch ein paar Sekunden Video, was ich damit mache (Verschachtelungen darstellen) - hätte ich schonmal eher machen sollen, hätte mir wohl einigen Ärger erspart

stahli 25. Feb 2021 23:51

AW: Grundsatzfrage Debuggen mit aktiven Threads
 
Weil ich gerade selbst so begeistert bin, hier mal ein kurzer Zwischenstand: https://youtu.be/JdIeAGPmElo (3 min)

Das taugt so für das Debuggen komplexer Daten sehr gut.
Die Positionen der Überwachungsformulare werden Dateinamenbezogen in einer Ini abgelegt, so dass die Formulare immer an der letzten Stelle neu geöffnet werden.

Ist so richtig nützlich und fast perfekt. :-)

Wenn es jemand mal braucht, stelle ich es gern bereit (die Datendarstellung selbst muss man dann natürlich auf den eigenen Bedarf anpassen - die Datenübergabe erfolgt über eine Textdatei)...

himitsu 26. Feb 2021 08:16

AW: Grundsatzfrage Debuggen mit aktiven Threads
 
hab'sch gestern entdeckt (noch nicht ausprobiert)
https://getitnow.embarcadero.com/ParallelDebugger-1.0/

Ist zwar scheinbar kein Start/Stop drin, aber mehrfache Stacktraces und so.

stahli 27. Feb 2021 21:58

AW: Grundsatzfrage Debuggen mit aktiven Threads
 
Danke, da traue ich mich erst mal noch nicht ran.
Vielleicht gibt es ja mal irgendwann noch ein paar Demos dazu...

himitsu 27. Feb 2021 22:25

AW: Grundsatzfrage Debuggen mit aktiven Threads
 
Witzig war das Verschieben des Stackpointers via Drag&Drop links in der Editorleiste. (ich vergesse eh immer den Shortcut für :roll:)

Da man eh zuiel Platz auf dem Monitor hat, ist so der Platz bissl genutzt.
https://parnassus.co/delphi-tools/parnassus-navigator/
Auf seiner Webseite hast auch paar Bilder/Animationen und vielleicht findest auch was in seinem Blog ... klein bissl was zur OTA.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.
Seite 2 von 3     12 3      

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