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的堆管理器会检查堆的数据完整性,如果它发现了一个错误,就会报告一个消息上来。
那么,我们怎么样才能知道造成错误的原因呢?如果只是类似上面的演示代码,不用任何技巧都能发现并且定位的。
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的堆管理器会检查堆的数据完整性,如果它发现了一个错误,就会报告一个消息上来。
那么,我们怎么样才能知道造成错误的原因呢?如果只是类似上面的演示代码,不用任何技巧都能发现并且定位的。
相关文章推荐
- 通过 Visual Studio 对 SQL Server 中的存储过程设置断点并进入存储过程对其进行调试
- [QT]没有选择Debug构建方式.为文件的某行设置断点可能会失败
- 使用xcode调试代码的时候进入断点显示变量全是nil,我用NSLog输出那个变量却是有值的,这个是什么原因呢
- C++中类型注册有的时候,函数找不到定义,可能是相应的头文件中防止重定义的声明,还是用原来的,没有做相应的更新
- ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案
- ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案
- 实验 8 数组2 1、程序调试,按照“分析结果、设置断点、使用单步执行并观察变量、分析变量结果、修改程序”五个阶段调试和改正程序;
- vs2005单步调试不了,设置断点没有用的解决办法
- 通过 Visual Studio 对 SQL Server 中的存储过程设置断点并进入存储过程对其进行调试
- VS2008中加断点调试,出现没有可用于当前的源代码,进入反汇编
- Silverlight程序设置断点无法进入调试的解决方案
- 使用vs2005+IE8添加断点调试的时候经常会偶然性失效或有效
- 解决:“开机设置了密码,可开机时却没有提示要输入密码的提示框,还是直接进入系统”和“系统无法让您登陆.请确定您的用户名及域名无误,然后再输入密码.密码的字母必须使用正确的大小写”
- VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件
- pycharm 不能单步调试(debug)的原因,或者点击debug不能进入断点。debug区域是灰色的
- Xcode 断点调试的时候控制台都是nil的设置
- ios 使用xcode调试代码的时候进入断点显示变量全是nil,但NSLog输出那个变量却是有值的
- 发现了Eclipse调试Android的时候的一个小技巧哦!DDMS快速进入断点状态
- [zt]调试的时候,无法设置数据断点(为灰色)
- 通过 Visual Studio 对 SQL Server 中的存储过程设置断点并进入存储过程对其进行调试