Breakpoint won't be hit

本文记录了作者使用Visual Studio 2010打开并修改一个原本基于VC6的MFC对话框程序时遇到的问题。主要问题是设置断点后提示源代码与原始版本不同,并给出了临时解决方案及根源探索。

微软的步伐很快,开发工具一二年就是一个版本,但使用最多最得心应手的还数VC6,感觉从那以后,VS的稳定性差了很多,不是突然卡住,就是表现的莫名其妙。今天一个问题就折腾了大半天,使用VS2010打开一个原来的VC6的项目,是使用MFC写的一个基于对话框的程序,微微修改了下,删除一个没有使用的变量声明,调试就出了状况。在设置断点的地方总是出现

"Breakpoint will not currently be hit. Source code is different from the original version",还算不错的是,提示里也包含了解决方法,在断点的Location设置里,check "Allow the source code to be diffrenet from the original version". 虽然可以工作,但只能说是差强人意,毕竟头痛医头,脚痛医脚是不行的。Root cause在哪里?

 

上google,原来这是VS的臭名昭著的issue,我不是一个人在战斗,查找解决方案,千奇百怪。

 

......

 

全文见http://user.qzone.qq.com/31731705/blog/1297414323

### 断点未命中的原因分析 当调试器显示“The breakpoint will not currently be hit.”时,这表明尽管设置了断点,但由于某种原因,程序运行过程中不会到达此位置。这种情况可能由多种因素引起,具体如下: #### 1. **源代码与编译版本不匹配** 如果当前正在调试的二进制文件是由不同的源代码生成,则可能导致断点无法命中。这是因为调试器无法将源代码映射到对应的机器码地址[^2]。 解决方案:确保使用的源代码是最新的,并重新构建项目以使源代码和可执行文件一致。 #### 2. **缺少符号表(Symbol Table)** 如果没有加载相应的符号信息,调试器就无法识别断点的位置。这种情况下,错误消息通常是“No symbols have been loaded for this document”。 解决方案:确认已启用符号加载选项,并验证目标模块是否包含正确的PDB文件(Program Database File)。可以通过以下方式检查: - 在Visual Studio中打开“Modules”窗口,查看所需的DLL或EXE是否列出了“Symbols Loaded”。 - 如果未加载符号,请手动指定符号路径并尝试再次加载[^3]。 #### 3. **条件断点设置不当** 即使启用了断点,但如果附加了特定条件而这些条件从未满足,则断点也不会触发。例如,只有当某个变量达到特殊值时才停止的情况[^1]。 解决方案:审查所有关联的断点属性,移除不必要的过滤规则或者调整逻辑表达式使其能够正常评估。 #### 4. **动态链接库(DLL)问题** 对于涉及外部DLL的应用程序来说,如果目标DLL尚未被加载至内存之中,那么针对它的任何断点都不会生效。此外,放置DLL于非标准目录下也可能干扰其正确引入过程[^4]。 解决方案:跟踪应用程序启动流程,等待必要组件完全初始化后再继续操作;另外建议遵循官方推荐的标准部署结构而非随意更改默认安装布局。 ```csharp // Example Code Snippet Showing How To Set A Conditional Breakpoint In Visual Studio if (myVariable == expectedValue) { System.Diagnostics.Debugger.Break(); // Forcefully invoke debugger here. } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值