Delphi 调试方法

以下内容是个人在使用中的总结,不足之处还望指正。

第一种是堆栈。快捷键是Ctrl+Alt+S

比如过程A和B都调用了过程C,或者不只如此,过程C在整个程序中大量地被调用。但现已知过程C在一次调用中因参数错误而运行失败了。怎样找出是哪一个过程传给C错误的参数了?这种情况下,一句一句跟踪是比较麻烦的。其实只要在过程C的开始的地方打个断点,中断的时候调出堆栈窗口就可以看到是哪一个过程调用C了,不仅如此,在A中调用B,在B中调用C,这一过程都可以看得一清二楚。在程序raise出一个异常而中断的时候也可以看出是从哪里调用了这段子程序的。

第二种是数据断点。菜单命令是Run->Add Break Point->Data Break Point

这个断点只能在运行时设。

举例如下:

要查看某全局变量或某类的属性何时被修改了的情况。例如要跟踪一个全局变量g_GlobalVar。在运行后中断程序,然后选Run->Add Break Point->Data Break Point。在地址一栏输入@g_GlobalVar,点OK即可。以后在这一变量被改变后就会中断(注意程序中断在改变这个变量的语句的下一条语句处,而不是本语句)

有时候调试的时候可以编码来实现动态断点:

if [Condition] then

asm

int 3;

end;

作用相当于设置条件断点,在条件比较复杂的情况下还是非常有用的

注意,这些调试语句需要使用编译条件控制以避免编译到正式的版本中。