AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Grundsatzfrage Debuggen mit aktiven Threads
Thema durchsuchen
Ansicht
Themen-Optionen

Grundsatzfrage Debuggen mit aktiven Threads

Ein Thema von stahli · begonnen am 4. Feb 2021 · letzter Beitrag vom 2. Mär 2021
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 4. Feb 2021, 19:48
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.
Miniaturansicht angehängter Grafiken
04-02-_2021_00-28-24.png  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 6. Feb 2021, 21:39
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...
Miniaturansicht angehängter Grafiken
06-02-_2021_22-15-12.png   06-02-_2021_22-19-19.png   06-02-_2021_22-21-32.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 8. Feb 2021, 12:45
*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?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#14

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 8. Feb 2021, 13:12
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Feb 2021 um 13:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 8. Feb 2021, 22:58
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
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 10. Feb 2021, 17:37
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 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
Miniaturansicht angehängter Grafiken
10-02-_2021_18-30-00.png   10-02-_2021_19-42-24.png  
Angehängte Dateien
Dateityp: zip SpyDetectMouse.zip (139,0 KB, 3x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (10. Feb 2021 um 20:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 25. Feb 2021, 23:51
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)...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#18

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 26. Feb 2021, 08:16
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 27. Feb 2021, 21:58
Danke, da traue ich mich erst mal noch nicht ran.
Vielleicht gibt es ja mal irgendwann noch ein paar Demos dazu...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#20

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 27. Feb 2021, 22:25
Witzig war das Verschieben des Stackpointers via Drag&Drop links in der Editorleiste. (ich vergesse eh immer den Shortcut für )

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Feb 2021 um 22:29 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 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