Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 Visual Studio 2010调试器生成正确-编译器pdb和链接器pdb不同步?_Visual Studio 2010_Debugging_Md5_Checksum_Pdb Files - Fatal编程技术网

Visual studio 2010 Visual Studio 2010调试器生成正确-编译器pdb和链接器pdb不同步?

Visual studio 2010 Visual Studio 2010调试器生成正确-编译器pdb和链接器pdb不同步?,visual-studio-2010,debugging,md5,checksum,pdb-files,Visual Studio 2010,Debugging,Md5,Checksum,Pdb Files,我在MS VS 2010中有一个解决方案,可以在全部重建后正确编译和构建(1)。但是,在我对源文件进行更改并开始调试之后,VS识别出该项目已过期,并成功地(如预期)构建了该项目(2) 问题是VS似乎开始使用obj/pdb/etc调试项目。。从(1)开始,而不是(2)。如果我闯入调试器并导航到感兴趣的文件中更改的模块,我会被告知“源文件与构建模块时不同”。表示我不想重建源代码,我得到以下信息:(请注意,为了获得“良好”的构建,我必须重建解决方案(或删除vc100.pdb)) 查找“感兴趣的文件”

我在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……但我不是肯定的

有人有什么想法吗

谢谢


Paul

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

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

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

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

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

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

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

为了正确构建,我必须强制VS重新编译MainTest.cpp。作为一种解决方法,我在项目的预构建事件中添加了一个“touch MainTest.cpp”

一些后续问题:

  • 微软打算解决这个问题吗?若有,有否
  • 有更好的解决办法吗

  • 解决方案非常简单

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

    • 在项目中再次包含相同的文件

    • 重建整个项目

    是的。我希望这能解决你的问题。
    SAM

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

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

  • 使用解决方案资源管理器中的右键单击手动编译项目中的所有.cpp文件
  • 触摸Main.cpp(运行:触摸Main.cpp)或任何/所有项目文件,然后重建项目
  • 重置项目设置(内部工具->导入和导出设置)并重新编译项目
    我找到了复制它的方法

    如果中间目录设置为

    $(TMP)\Build\$(SolutionName) - $(Platform).$(Configuration) - $(ProjectName)\
    
    然后链接器将看不到更改,但如果将其设置为

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

    然后链接将正常

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

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

    我还想指出,VS 2005正确检测到了这些情况。导入到VS 2010后,我的解决方案崩溃。这对我不起作用。。。它是vs2010的一个bug吗?我的无来源可用页面信息为: