2008-10-02 9 views
25

Ich bin mir ziemlich sicher, dass ich das schon einmal gesehen habe, aber ich habe es nicht herausgefunden, wie es gemacht wird. Ich möchte eine Codezeile haben, die, wenn sie vom Delphi-Debugger ausgeführt wird, den Debugger aufrufen soll, als ob es einen Unterbrechungspunkt in dieser Zeile gäbe.Wie simuliert man einen Delphi Breakpoint im Code?

Etwas wie:

FooBar := Foo(Bar); 
SimulateBreakPoint; // Cause break point to occur in Delphi IDE if attached 
WriteLn('Value: ' + FooBar); 

Hoffentlich, die Sinn macht. Ich weiß, dass ich eine Ausnahme verwenden könnte, aber das wäre viel mehr Aufwand, als ich möchte. Es ist für einige Demo-Code.

Vielen Dank im Voraus!

Antwort

37

den Debugger von Code auszulösen (angeblich, ich eine Kopie von delphi nicht haben praktisch versuchen):

asm int 3 end; 

Sehen Sie diese Seite:

http://17slon.com/blogs/gabr/2008/03/debugging-with-lazy-breakpoints.html

+0

Das war es. Hat super funktioniert! Vielen Dank! Jetzt muss ich einen Weg finden, um den Call-Stack für den Break-Point nach oben zu bewegen. . . . –

+0

Achten Sie darauf, EExternal zu fangen, da sonst eine externe Ausnahme auftritt, wenn Sie außerhalb des Debuggers ausgeführt werden. –

+2

Oder, wie ich vorgeschlagen habe: wenn DebugHook <> 0 dann asm int 3 Ende; – gabr

13

Als Andreas Hausladen In Kommentaren zu diesem Artikel angegeben, Win32 API DebugBreak() -Funktion ist weniger DOS-ish und funktioniert genauso gut.

+10

DebugBreak() platziert den Unterbrechungspunkt im Fenster "Disassembly/CPU". Ich hätte es lieber in meinem Code. –

Verwandte Themen