未加载符号文件以在Visual Studio 2012中调试自定义项目

Nan*_*rin 55 .net c# msbuild visual-studio visual-studio-2012

我在Visual Studio 2012中有一个大型解决方案,它包含可执行文件和类库项目.在调试应用程序时,一个特定类库项目中的断点未被命中.

我查看了Debug> Windows> Modules窗口,检查该项目符号的状态,并显示"无法找到或打开PDB文件".
它还在"用户代码"列下显示"否". 我注意到解决方案中还有一些自定义项目在该列中显示"否",并且它们的符号也无法加载."用户代码"下面带有"是"的任何内容似乎已经将pdb加载没有问题.但我不确定这是否相关.

我在dll上使用了dumpbin/headers,并且pdb文件的路径是正确的.

该模块绝对不在符号加载的排除列表中.

我还尝试右键单击模块窗口中的条目,选择"加载符号"并导航到dll标题中给出的路径.当我选择pdb时,它说"在此文件夹中找不到匹配的符号文件".

在删除这些文件夹和文件,清理解决方案,关闭它并重建整个文件后,我得到了这个.pdb肯定与有问题的dll同时构建.

所以很明显问题是"无法打开pdb"部分的错误消息.

我在2台计算机上试过这个,两者都表现出相同的行为.

任何人都可以提供任何建议,从这里去哪里,也许为什么在地球上对应的dll的内置pdb将不会加载它?

Nan*_*rin 42

我尝试了一些工具来检查pdb和dll是否实际匹配,并且使用chkmatch我可以看到正在运行的dll中的GUID和obj文件夹中的pdb不匹配.

事实证明,虽然项目的obj文件夹中的dll和pdb是匹配的,但是实际上通过构建后事件复制到应用程序的目标文件夹的dll是来自上一版本的旧dll.

构建后事件在该特定项目构建之前运行,或者至少完成构建,并且正在从bin中复制现有dll,随后由继续构建覆盖.

我已经通过编辑解决方案的项目依赖项来确定问题,并确保具有post-build事件的项目依赖于未加载的项目,现在pdb在调试期间加载.

  • 我有同样的问题,通过阅读你的解决方案,我仍然不明白你做了什么来解决它.你能解释得更详细吗? (3认同)
  • 基本上我的项目是以错误的顺序构建的。当您右键单击 Visual Studio 2012 中的解决方案时,会出现一个“项目依赖关系”选项,并且在打开的窗口上有一个“构建顺序”选项卡,您可以在其中设置项目的构建顺序。 (2认同)

小智 32

我只是从启动项目文件夹中删除了bin和obj文件夹并重建了解决方案.


Moh*_*adr 10

对我来说,我刚刚从IIS中删除了该项目,并再次创建它,它工作正常

  • 清理解决方案对我来说不起作用,但重置本地IIS就可以了.显然,一些程序集仍然被缓存. (4认同)

Pom*_*air 9

对我来说,它有助于使用chkmatch工具,然后关闭并打开visual studio,进行清理和重建.现在我的pdb也被加载了.正如Nanhydrin指出的那样,您可以确保它来自Debug - > Windows - > Modules - 这个视图只能在调试期间访问.


小智 9

Enable Just My Code就我而言,在 中有一个复选标记Tools>>Options>>Debugging>>General

我取消选中它并且它起作用了。

示例图片


jus*_*121 7

在我的情况下,引用的dll的旧版本在我的GAC中.清除它,它工作.


chr*_*389 6

我发现我收到消息的项目在构建时正在优化.

我进入了项目属性,编译选项卡,高级编译选项...并取消选中该Enable Optimizations复选框

取消选择


Sim*_*Off 5

提醒:将项目置于“调试”配置中...对于那些像我一样忘记并感到愚蠢的人。