zoukankan      html  css  js  c++  java
  • VS调试时断点无法进入或命中的原因及解决方法(PDB引发的)

    在使用VS开发时,有时断点会无法进入,特别是在一个项目中引用另一个类库项目时。如下图。


    我在一个项目中引用了自定义的控件MyControl类库,但在使用时发现,有些地方还需要调整,比如这里我需要增加一个GUID作为特殊标识,并输出以供测试。但是当我将这段代码加入进去后,按F5运行程序时,这段代码的断点没有如预期的进入。

    注:无法进入的断点是空心的,可以进入的断点是实心的。

    于是将鼠标定位到了断点的位置,提示如上图。会发现这是因为源代码与原始版本不同造成的。这时我们可以按照提示中所说的方法来解决试试。

    解决方法1:右击断点->位置->允许源代码与原始版本不同。如下图

    (注意要在非运行状态下右击断点,不然会无法更新代码)



    但是在实际运行时会发现,此方法并不一定靠谱,因为调试时断点自动往下跳了。这样一来,断点同样会无法进入。

    解决方法2:工具->选项->调试->常规->禁用要求源文件与原始版本完全匹配。如下图


    这时再运行,断点已经可以正常进入了。

    解决方法3:重新生成解决方案或者先清理解决方案再生成解决方案


    这时再运行,断点也可以正常进入。

    那么为什么会造成这种情况呢?这时因为调试时使用的是PDB(Program Database)文件,而当我们在类库中修改代码后,由于没有重新编译,会使用上次的PDB文件,这样就造成了原来的PDB和新的代码文件不匹配,自然调试时也就无法正确进入断点。

    再有前面提到,有时断点会跳到其他的位置,是因为断点是定位在代码的行上的,而PDB文件中记录了代码的行数,但是PDB文件却没有更新,所以当我们强行将断点处的代码设置"允许源代码与原始版本不同"时,如果依旧使用上一次的PDB文件,自然断点的行数就定位到了上次记录的代码行数,所以断点就会往后跳了。

    关于PDB的说明可以参看该文http://www.codeproject.com/Articles/349076/Know-Program-Database-file-PDB

  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7605047.html
Copyright © 2011-2022 走看看