29

I am pretty sure I have seen this before, but I haven't found out / remembered how to do it. I want to have a line of code that when executed from the Delphi debugger I want the debugger to pop-up like there was a break point on that line.

Something like:

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

Hopefully that makes sense. I know I could use an exception, but that would be a lot more overhead then I want. It is for some demonstration code.

Thanks in advance!

2 Answers 2

42

To trigger the debugger from code (supposedly, I don't have a copy of delphi handy to try):

asm int 3 end;

See this page:

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

Sign up to request clarification or add additional context in comments.

4 Comments

That was it. Worked great! Thanks! Now I need to find a way to move up the call stack for the break point. . . .
Beware to catch EExternal else there will be an external exception while running outside of the debugger.
Or, as I suggested: if DebugHook <> 0 then asm int 3 end;
I'd usually do "if (DebugHook <> 0) and (Break Condition) then asm int 3 end;" so i'd add a condition to break, and put this code right before an error/bug in some conditions.
16

As Andreas Hausladen stated in comments to that artice, Win32 API DebugBreak() function is less DOS-ish and works equally well.

1 Comment

DebugBreak() puts the break point in the dissassembly/CPU window. I'd rather have it in my code.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.