您的位置:首页 > 编程语言 > Qt开发

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

2016-10-20 00:33 316 查看
我们在调试程序的过程中,有时会突然的显示一个对话框,上面显示这样一条信息:

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的堆管理器会检查堆的数据完整性,如果它发现了一个错误,就会报告一个消息上来。

 

那么,我们怎么样才能知道造成错误的原因呢?如果只是类似上面的演示代码,不用任何技巧都能发现并且定位的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐