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
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.064 Beiträge
 
Delphi 12 Athens
 
#1

AW: Grundsatzfrage Debuggen mit aktiven Threads

  Alt 4. Feb 2021, 19:36
Dafür eignen sich Tools wie TMS Logging:
https://tmssoftware.com/site/tmslogging.asp
Damit kannst du nebenbei eine Webseite aufmachen und die Logs strukturiert einsehen. Du kannst die Daten aber auch in einem eigenen IDE Plugin abrufen usw.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

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.
Angehängte Grafiken
Dateityp: png 04-02-_2021_00-28-24.png (14,0 KB, 33x aufgerufen)
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.358 Beiträge
 
Delphi 11 Alexandria
 
#3

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...
Angehängte Grafiken
Dateityp: png 06-02-_2021_22-15-12.png (20,5 KB, 24x aufgerufen)
Dateityp: png 06-02-_2021_22-19-19.png (31,5 KB, 24x aufgerufen)
Dateityp: jpg 06-02-_2021_22-21-32.jpg (133,5 KB, 22x aufgerufen)
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.358 Beiträge
 
Delphi 11 Alexandria
 
#4

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
44.575 Beiträge
 
Delphi 12 Athens
 
#5

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)
Ein Therapeut entspricht 1024 Gigapeut.

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.358 Beiträge
 
Delphi 11 Alexandria
 
#6

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.358 Beiträge
 
Delphi 11 Alexandria
 
#7

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
Angehängte Grafiken
Dateityp: png 10-02-_2021_19-42-24.png (27,3 KB, 10x aufgerufen)
Dateityp: png 10-02-_2021_18-30-00.png (24,1 KB, 16x aufgerufen)
Angehängte Dateien
Dateityp: zip SpyDetectMouse.zip (139,0 KB, 4x 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
Antwort Antwort


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 06:51 Uhr.
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