2008-10-02 25 views
25

Je suis assez sûr que j'ai déjà vu cela, mais je n'ai pas découvert/me souviens comment le faire. Je veux avoir une ligne de code qui, lorsqu'elle est exécutée depuis le débogueur Delphi, veut que le débogueur apparaisse comme s'il y avait un point d'arrêt sur cette ligne.Comment simuler un point d'arrêt Delphi dans le code?

Quelque chose comme:

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

Espérons que logique. Je sais que je pourrais utiliser une exception, mais ce serait beaucoup plus de frais généraux que je veux. C'est pour un code de démonstration.

Merci d'avance!

Répondre

37

Pour déclencher le débogueur de code (soi-disant, je n'ai pas une copie de delphi à portée de main pour essayer):

asm int 3 end; 

Voir cette page:

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

+0

C'était tout. J'ai bien travaillé! Merci! Maintenant, je dois trouver un moyen de remonter la pile d'appels pour le point de rupture. . . . –

+0

Méfiez-vous d'attraper EExternal sinon il y aura une exception externe lors de l'exécution en dehors du débogueur. –

+2

Ou, comme je l'ai suggéré: si DebugHook <> 0 alors asm int 3 end; – gabr

13

Comme Andreas Hausladen déclaré dans les commentaires à cette artice, Win32 API DebugBreak() est moins DOS-ish et fonctionne tout aussi bien.

+10

DebugBreak() place le point d'arrêt dans la fenêtre de désassemblage/CPU. Je préfère l'avoir dans mon code. –