2008-10-02 46 views
25

Estoy bastante seguro de haber visto esto antes, pero no he descubierto/recordado cómo hacerlo. Quiero tener una línea de código que cuando se ejecute desde el depurador Delphi, quiero que aparezca el depurador como si hubiera un punto de interrupción en esa línea.Cómo simular un punto de interrupción Delphi en el código?

Algo así como:

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

Esperemos que tenga sentido. Sé que podría usar una excepción, pero eso sería mucho más sobrecargado de lo que quisiera. Es para algún código de demostración.

¡Gracias de antemano!

Respuesta

37

Para activar el depurador de código (supuestamente, no tengo una copia de Delphi útil para probar):

asm int 3 end; 

Ver esta página:

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

+0

Eso fue todo. Funcionó muy bien! ¡Gracias! Ahora necesito encontrar una manera de subir la pila de llamadas para el punto de ruptura. . . . –

+0

Tenga cuidado para atrapar EExternal, de lo contrario habrá una excepción externa mientras se ejecuta fuera del depurador. –

+2

O, como sugerí: si DebugHook <> 0 entonces asm int 3 end; – gabr

13

Como Andreas Hausladen declaró en comentarios a esa artice, la función Win32 API DebugBreak() es menos DOS-ish y funciona igual de bien.

+10

DebugBreak() coloca el punto de corte en la ventana dissassembly/CPU. Prefiero tenerlo en mi código. –

Cuestiones relacionadas