打印
[其他ST产品]

不能设置断点的检查步骤

[复制链接]
521|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在调试程序的时候,有的时候你会发现设置的断点不起作用,而且更糟糕的是,一般碰到这种情况的时候都是非常紧急或者是加班到夜已深、人寂静的时候了。正是应了那句玩笑话:“机器机器,越急越气!”。一般发生断点不起作用的话:

1.         你首先要判断的是断点是否真的设置上了?

a)         如果在Visual Studio里面,你的断点符号是一个实心圆,那么断点的确是设置上了,你要判断的是设置断点的语句是否真的被执行到了,这种情况的解决方案不在本文讨论当中。

b)         如果在Visual Studio里面,你的断点符号是一个空心圆,那么说明断点被你禁用了,那么启用就行了。

c)         如果在Visual Studio里面,你的断点符号是一个空心圆并且还带了一个小感叹号的话,如下图所示:



使用特权

评论回复
沙发
梵蒂冈是神uy|  楼主 | 2024-3-30 11:36 | 只看该作者
那么说明你的调试符号文件没有被正确加载,参看我这篇文档了解什么是符号文件:http://blog.csdn.net/Donjuan/archive/2008/12/05/3454597.aspx

2.         如果确定是符号文件没有加载正确,单击“调试”-- >“窗口”-- >“模块”列出程序加载的所有DLL文件,模块窗口还会列出每一个DLL文件的符号文件加载信息:

使用特权

评论回复
板凳
梵蒂冈是神uy|  楼主 | 2024-3-30 11:36 | 只看该作者
如果你有PDB文件,只要在右键菜单里面选择“加载符号文件”选项在打开的对话框里面输入符号文件的路径就可以了。如果你选择了符号文件,Visual studio还是报错说符号文件不能加载的话,那么请确认符号文件是否和调试的模块相匹配,因为不匹配的话,调试器就没有办法正确设置断点,没有正确显示变量的值。

使用特权

评论回复
地板
梵蒂冈是神uy|  楼主 | 2024-3-30 11:37 | 只看该作者
判断符号文件与模块是否匹配最简便的方法就是察看两者的创建时间是否相同,如果不同的话,那就肯定是不匹配的。

使用特权

评论回复
5
梵蒂冈是神uy|  楼主 | 2024-3-30 11:37 | 只看该作者
如果时间相同,那有可能是因为模块文件是调试(Debug)版本,而符号文件是发布(Release)版本,这个时候,你可以用windbg自带的symchk程序来检查一下。命令的语法是:

使用特权

评论回复
6
梵蒂冈是神uy|  楼主 | 2024-3-30 11:37 | 只看该作者
Symchk.exe <模块的完整路径> /s <符号文件所在的文件夹>

下面两个图片分别是符号文件不匹配和匹配的输出示例:

使用特权

评论回复
7
梵蒂冈是神uy|  楼主 | 2024-3-30 11:37 | 只看该作者
符号文件和模块不匹配

使用特权

评论回复
8
梵蒂冈是神uy|  楼主 | 2024-3-30 11:38 | 只看该作者
符号文件和模块匹配的情形



c)         或者你有源代码的话,那就干脆重新编译一次就完了—这是最简单的方法。

使用特权

评论回复
9
梵蒂冈是神uy|  楼主 | 2024-3-30 11:38 | 只看该作者
如果在“模块”窗口里面显示的是“跳过加载符号文件”,那么说明Visual studio默认认为这个模块的源代码不是程序的一部分,比如是程序引用到的一些.NET Framework的Assembly文件,因此它认为你不必要给这个模块排错。但是有的时候你需要看看堆栈信息或者需要单步跟踪进.NET Framwork的函数里面看看为什么调用会出错,因此你可以通过单击VS菜单里面的“工具”-- >“选项”-- >“调试”-- >“通用(General)”,勾掉“只调试我的代码”复选框,点击确定就可以了:

使用特权

评论回复
10
梵蒂冈是神uy|  楼主 | 2024-3-30 11:38 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

47

主题

680

帖子

1

粉丝