关于VS2010打不上断点问题

VS的可视化调试十分的方便,极大利于提高开发效率,但是有时候会遇到代码中无法启用断点问题。关于代码是否能够到达断点,一个很灵魂的问题就是:编译器是否能识别代码片段和是否能进入代码。只要满足这个条件,就不会存在打不上断点的情况。以下分析我工作中遇到的几种常见问题。

1.代码是否漏编译

最基础的,确保代码是否漏编译?如果其中部分代码漏编译,那么对于编译器那肯定是未知的。未知的肯定是不能打断点 的这无可厚非。只有满足我前面说到的两个条件,才能打断点。未知的代码段,编译器未到达过所有编译器提示,还未加载任何符号。

2.代码是否保存

确保1的前提下,如果开始代码是能调试的,但是代码改动后就不能调试了。很大一部分原因是我们在vs中编辑了代码。可能是编码格式或者代码未保存导致,这里建议使用vscode编辑代码再保存代码为UTF-8.再vs中打开重新生成一下,就又能调试并打断点了。

3.代码是否同源

可能从别人那里拷过来或者网上下载的代码,代码中某些字符(汉字等)乱码时,也可以用此方法解决乱码的问题,若不用此方法,则将代码保存为不乱码的格式,则又可以打断点了

工具->选项->调试下的“要求源文件与原始版本完全匹配“的钩去掉即可打断点了,如图:

4.代码与动态库调试时

代码中需要加载插件时,这个问题很容易被大多数人忽略。前面开始我提到两个条件:编译器是否能识别代码与编译器是否能找到代码。编译器编译过就是编译器提前走过代码,因此就能打断点。打个比方:只有你走过前面的所有路,所以你才能给路上的所有标志打上记号。走过所有的路,再重新回到起始位置,你才能知道所有路上的记号,因为你已经走过了。对于没有走过的路,那肯定是不能打断点的,所有我才说未知是不能打断点的。

因此这种情况:确保你的代码能够走到插件里面,也就是说你的代码确确实实是调用的插件。简单点说就是:插件的代码运行调试的同时启动的是又代码生成的插件。有时候我们的代码运行时,跟程序启动时运行的不是同一个插件,这就是代码与插件不同源。有的工程加载插件时是从配置文件去加载插件的,也许插件加载上了。我们调试代码时以为代码运行时就是调用的代码生成的插件,其实不然可能我们的程序并没有走由代码生成的插件,而是走的其他的插件。因此我们打不上断点是肯定的,因为我们的程序根本就没有执行到插件的代码中去。所以要解决这个问题就需要确保我们程序运行调用的插件是我们代码生成的插件保持一致,那就不存在打不上断点的情况了。

以上只是列举了一下我常遇到的一些问题。

总之基于我前面提到的两种条件,去具体问题具体分析。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你无法在 Visual Studio 中设置断点并调试 MFC 代码,可能是由于以下一些原因导致的: 1. 编译选项问题:确保在项目的调试配置中启用了调试信息(Debug Information),并且选择了正确的调试器。在项目属性的“配置属性” -> “C/C++” -> “常规”中,确保“调试信息格式”设置为“调试 (/Zi)”或“调试增强 (/ZI)”。在“配置属性” -> “链接器” -> “调试”中,选择“生成调试信息(/DEBUG)”。 2. 符号文件加载问题:如果你的 DLL 是从其他项目加载的,而且该项目无法找到相应的符号文件(.pdb 文件),则 VS 将无法设置断点。确保编译并生成 DLL 的项目和加载 DLL 的项目都能找到正确的符号文件。 3. 运行时库问题:如果你的 DLL 和加载 DLL 的项目使用了不同的运行时库,可能会导致调试问题。确保两者都使用相同的运行时库(例如,都使用动态链接的多线程调试运行时库)。 4. 调试器安装问题:检查 Visual Studio 的安装是否完整,并且是否安装了正确版本的调试器。 如果上述步骤都没有解决问题,你可以尝试以下方法: - 清理和重新生成解决方案。 - 禁用优化选项,以便在编译期间生成更准确的调试信息。 - 将断点设置在其他位置,例如函数的开头或结尾。 - 尝试使用“条件断点”来设置断点,以便在满足特定条件时触发断点。 如果问题仍然存在,建议参考 Visual Studio 的文档或搜索相关的论坛讨论,以获取更专业的支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值