AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi eigener Debugger - Haltepunkte
Thema durchsuchen
Ansicht
Themen-Optionen

eigener Debugger - Haltepunkte

Offene Frage von "himitsu"
Ein Thema von himitsu · begonnen am 17. Jun 2024 · letzter Beitrag vom 2. Jul 2024
Antwort Antwort
Seite 3 von 3     123   
Kas Ob.

Registriert seit: 3. Sep 2023
353 Beiträge
 
#21

AW: eigener Debugger - Haltepunkte

  Alt 24. Jun 2024, 16:27
Sorry !!

I missed the link
https://stackoverflow.com/questions/...ruction-on-x86
Kas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: eigener Debugger - Haltepunkte

  Alt 28. Jun 2024, 10:08
Also, in den DR-Registern soll man wohl "je einen Haltepunkt" angeben können ... noch nicht probiert, aber das wären eh zu wenige

Das Trap-Flag einfach so zu setzen, hat keine Wirkung,
Delphi-Quellcode:
hMainThread := OpenThread(…, MainThreadID);
GetThreadContext(hThread, Context);
Context.EFlags := Context.EFlags or $0100; // Trap-Flag (TF)
SetThreadContext(hThread, Context);
CloseHandle(HThread)
jedenfals nicht, wenn ich es in meinem Debugger mache (Taste [S] während des Debugging).

In der TestApp gesetzt, bzw. während eines Debug-Ereignisses, geht es,
aber bleibt dann auch irgendwann wieder aus und es stoppt. (siehe BreakPoint- oder SingeStep-Taste in der TestApp)

http://fnse.de/MiniDebugger.7z
SuperMiniDebugger.exe -demo-executable -all

PS: In der -help die DebugTasten nicht aktualisiert ... siehe Console, zu Beginn des Debuggens (hochscrollen)
$2B or not $2B

Geändert von himitsu (28. Jun 2024 um 10:13 Uhr)
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
353 Beiträge
 
#23

AW: eigener Debugger - Haltepunkte

  Alt 28. Jun 2024, 12:19
Looks nice and working fine, though the source is not XE8 friendly due the inline variables and may be missing constants.

Question :
Why the overhead of keep opening the (a) thread and closing its handle ?!!

You have in the debugger loop an very useful events CREATE_THREAD_DEBUG_EVENT, and EXIT_THREAD_DEBUG_EVENT, so build a list or dictionary and do the open/close only once, this should help in speeding the trace.

As for the trap bit in the EFlags:
Single step is hardware generated interrupt same as hardware breakpoints, but for the single step to work these DR0-DR3 should be put to 0, in other words either you have enabled hardware breakpoints at specific addresses or single step, but not both at the same time.

May be just 0 to DR7 could be enough (zeroing all the bits) , but in my opinion the best is to clear DR0-DR3 and DR7, and think it will work every time.


ps: ran the binary and clicked on the buttons many times and couldn't see a failure.

ps2: i found this, it does confirm my recall about hardware breakpoints:
https://stackoverflow.com/questions/...p-all-the-time
Kas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: eigener Debugger - Haltepunkte

  Alt 28. Jun 2024, 14:30
Why the overhead of keep opening the (a) thread and closing its handle ?!!
Weil WaitForDebugEventEx an diesen Stellen bloß die ThreadID liefert.

Ich finde es auch nicht wirklich schön, aber erstmal ist dieser Teil dort bloß zum Test drin
und dann abeitet hier alles noch sehr linear, ohne dass vieles zwischengespeichert wird.
* SuperMiniDebugger.dproj zum Test der Grundfunktionen
* und später im MiniDebugger.dproj dann inkl. erweitertem Handling

Ja, im Prinzip könnte man sich hier z.B. im CREATE_THREAD_DEBUG_EVENT das Handle klonen (DebugEvent.CreateThread.hThread) und bis zum EXIT_THREAD_DEBUG_EVENT aufheben.

Bzw. hier ist erstmal absichtlich noch nicht viel drin, um Dinge über längere Zeit zu behalten.
Primär wirklich erstmal nur die jeweiligen Events/Behandlungen für sich.
Daher kennen und logen die END-Events von DLL, Thread und Prozess auch keine Namen. (sie bekommen nur die ID, bzw. Adresse aus dem END-EventRecord)
$2B or not $2B

Geändert von himitsu (28. Jun 2024 um 14:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: eigener Debugger - Haltepunkte

  Alt 2. Jul 2024, 20:33
Weiß nicht, hab nun auch an den Debug-Registern rumgespielt, aber SingleStepping will nicht weiterlaufen.

Nja, hatte mich jetzt erstmal kurz abgelenkt und einen ersten Teil der Debuginfos erledigt.
Aus Microsoft-EXE/DLLs den Name und die GUID der PDB-Datei auslesen
und die PDB oder gewünschte Binaries von Microsofts DebugSymbol-Server downloaden.
(jetzt noch den halbangefangenen Code erledigen, um Dateinamen und Lines aus diesen Debuginfos auszulesen)

Hier gab es wenig mehr Infos und die auch noch verständlicher, auch wenn Microsoft das Format nie öffentlich dokumentiert hat ... aber bezüglich TDS dennoch einfacher.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 23: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