Delphi 调试方法

博客介绍了调试时可通过编码实现动态断点,代码示例为 if [Condition] then asm int 3; end; ,其作用相当于设置条件断点,在复杂条件下很有用,同时提醒这些调试语句需用编译条件控制,避免编译到正式版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下内容是个人在使用中的总结,不足之处还望指正。
第一种是堆栈。快捷键是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;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值