QT经常调试的时候进入高亮区域,原来没有设置断点,结果还是会进入?

我们在调试程序的过程中,有时会突然的显示一个对话框,上面显示这样一条信息:

User breakpoint called from code at 0x77fa018c

或者是

Unhandled exception at 0x77f767cd (ntdll.dll) in myapp.exe: User breakpoint.


不过我遇到过的都是第一条信息,没有遇到过第二条信息。
 
怎么回事?我们没有设置断点呀!为什么会有一个用户断点?


并且这个问题看起来并没有那么严重,不在调试状态下,程序正常运行,即使在调试状态下我们把这个对话框按了确定后,


再继续F5,好像什么事情也没有发生,程序仍然在正常运行!
 
隐患!千万不要忽视她!这个信息告诉我们,程序中某个地方已经开始溃烂,如果你频繁的碰到这个对话框,就说明溃烂已经扩大了。
 
如果你够仔细,你会发现在你点了这个对话框的确定按钮之后,会在Output窗口中发现多了一行信息:

HEAP[DebugInfo2.exe]: Heap block at 00030FD8 modified at 00031010 past requested size of 30
 
 重现这样的现场很容易的,只需几行代码就可以了
char *p = new char[4];
lstrcpy(p, "this is a test");
delete p;
 
为什么会有这样的信息消息框出现呢?这是因为如果我们在调试状态下,操作系统用DebugWin32Heap来替代正常的heap分配内存空间。


在这个堆上的任何操作,debug的堆管理器会检查堆的数据完整性,如果它发现了一个错误,就会报告一个消息上来。
 
那么,我们怎么样才能知道造成错误的原因呢?如果只是类似上面的演示代码,不用任何技巧都能发现并且定位的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值