【问题标题】:Visual Studio 2010 debugger build correctly - compiler pdb and linker pdb not in synch?Visual Studio 2010 调试器构建正确 - 编译器 pdb 和链接器 pdb 不同步?
【发布时间】:2011-08-01 21:59:28
【问题描述】:

我在 MS VS 2010 中有一个解决方案,可以在全部重建后正确编译和构建 (1)。但是,在我对源文件进行更改并开始调试后,VS 会识别出该项目已过期并成功构建项目 (2)(如预期的那样)。

问题在于 VS 似乎开始使用 obj/pdb/etc.. 从上面的 (1) 而不是 (2) 调试项目。如果我闯入调试器并导航到感兴趣文件中更改的模块,我会被告知“源文件与构建模块时不同”。表明我不想重建源代码,我得到以下信息:(请注意,为了获得“好的”构建,我必须重建解决方案(或删除 vc100.pdb))。


查找“感兴趣的文件”的来源。校验和:MD5 {59 96 7d 1 9f b 33 20 63 4c 81 1d d7 c6 94 30}

确定校验和是否与以下位置匹配: 1:“感兴趣的文件”校验和:MD5 {61 66 43 cb d1 97 d1 d5 0 dc 9b 60 64 71 b2 b6} 校验和不匹配。 文件“感兴趣的文件”存在。

正在寻找“感兴趣的文件”的脚本文档...

确定校验和是否与以下位置匹配:

1:“感兴趣的文件”校验和:MD5 {61 66 43 cb d1 97 d1 d5 0 dc 9b 60 64 71 b2 b6} 校验和不匹配。

在项目中查找“感兴趣的文件”。

在项目中找不到该文件。

查看目录

.

其他目录

.

调试器会要求用户查找文件:“感兴趣的文件”。

用户在“查找源”对话框中按下了取消。调试源文件设置 已修改活动解决方案,以便调试器不会要求用户查找文件:“感兴趣的文件”。

调试器找不到源文件“感兴趣的文件”。


此时调试器识别出 pdb 哈希不同步,即使编译器/链接器之前未能识别这一点。重建后一切正常,但更改源文件后似乎无法正确构建自身。

似乎“重建”可以正确构建 vc100.pdb 和调试器 pdb,而“正常”构建仅涉及编译器/链接器 vc100.pdb...但我并不肯定。

有人有什么想法吗?

谢谢,

保罗

【问题讨论】:

    标签: visual-studio-2010 debugging md5 checksum pdb-files


    【解决方案1】:

    解决方案非常简单。

    • 只需从项目中排除文件(校验和 出现问题)。

    • 在项目中再次包含同一个文件

    • 重建整个项目

    算了。我希望这能解决您的问题。 山姆

    【讨论】:

    • 这对我不起作用...是vs2010的错误吗?我的 No Source Available 页面信息是:codepad.org/g2mul655
    【解决方案2】:

    问题不在于 pdb,而在于 VS 没有正确检测何时应该重新编译模块。

    更具体地说,我有一个源代码控制的代码库,它通过一套单元测试进行测试。

    单元测试从一个主文件开始,比如 MainTest.cpp,它具有启动所有测试的 int main(...) 函数。这只是一个胶水文件,很少更改。经常更改的文件是它导入的测试类。

    现在,我所有的测试类都是“无标题的”,即所有定义/声明都包含在一个模块中(例如 TestClass1.cpp、TestClass2.cpp 等),主要是因为它们只是测试,而我不想要额外的混乱。

    问题是当我对 TestClass1.cpp 进行更改并构建时,VS 2010 认为没有必要重新构建 MainTest.cpp 说:

    正在跳过...(未检测到相关更改) MainTest.cpp

    显然这是一个已知问题,请参阅:

    http://connect.microsoft.com/VisualStudio/feedback/details/99825/code-change-in-header-does-not-re-compile-correctly

    要正确构建,我必须强制 VS 重新编译 MainTest.cpp。作为一种解决方法,我在项目的 Pre-Build Event 中放置了一个“touch MainTest.cpp”。

    一些后续问题:

    1. MS 是否打算解决此问题?如果有,有吗?
    2. 有更好的解决方法吗?

    【讨论】:

    • 我还想指出,VS 2005 正确地检测到了这些情况。导入到 VS 2010 后,我的解决方案崩溃了。
    【解决方案3】:

    从项目中排除文件,然后通过项目编译再次包含它是唯一有效的解决方案。感谢山姆。我写信是为了记录潜在的解决方案并表明这个建议是最有效的。

    以下经常建议的解决方案不起作用:

    1. 在解决方案资源管理器中单击右键手动编译项目中的所有 .cpp 文件。
    2. 触摸 Main.cpp(运行:touch main.cpp)或任何/所有项目文件,然后重建项目。
    3. 重置项目设置(内部工具-> 导入和导出设置)并重新编译项目。

    【讨论】:

      【解决方案4】:

      我已经找到了如何重现它

      如果中间目录设置为类似

      $(TMP)\Build\$(SolutionName) - $(Platform).$(Configuration) - $(ProjectName)\
      

      然后链接器将看不到更改,但如果您将其设置为

      S:\Build\$(SolutionName) - $(Platform).$(Configuration) - $(ProjectName)\
      

      然后链接就OK了

      【讨论】:

        【解决方案5】:

        问题出在 PDB 文件上。在重建项目之前对项目进行清理

        【讨论】:

          【解决方案6】:

          由于 PDB 文件而出现问题。清理项目并重建它。或者从项目中删除文件并重新包含它并重新构建它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-04-04
            • 1970-01-01
            • 2017-06-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多