我在Visual Studio 2012中有一个大型解决方案,它包含可执行文件和类库项目。 在调试应用程序时,一个特定类库项目中的断点未被命中。
我查看了调试> Windows和GT;模块窗口,用于检查该项目符号的状态,并显示“无法找到或打开PDB文件”。
它还在“用户代码”列下显示“否”
我注意到解决方案中还有一些自定义项目在该列中显示“否”,并且它们的符号也无法加载。 “用户代码”下面带有“是”的任何内容似乎已经将pdb加载没有问题。但我不确定这是否相关。
我在dll上使用了 dumpbin / headers ,并且pdb文件的路径存在且正确。
模块绝对不在符号加载的排除列表中。
我还尝试右键单击模块窗口中的条目,选择“加载符号”并导航到dll标题中给出的路径。当我选择pdb时,它说“在此文件夹中找不到匹配的符号文件”。
在删除这些文件夹和文件,清理解决方案,关闭它并重建整个文件后,我得到了这个。 pdb肯定与有问题的dll同时构建。
显然问题是错误消息的“无法打开pdb”部分。
我在两台计算机上试过这个,两者都表现出相同的行为。
任何人都可以提供任何关于从何处开始的建议,也许为什么在地球上对应于dll的内置pdb不会加载?
答案 0 :(得分:38)
我尝试了一些工具来检查pdb和dll是否实际匹配,并使用chkmatch我可以看到正在运行的dll中的GUID与obj文件夹中的pdb不匹配。< / p>
事实证明,虽然项目的obj文件夹中的dll和pdb是匹配的,但是实际上通过构建后事件复制到应用程序的目标文件夹的dll是来自上一版本的旧dll。
构建后事件在该特定项目构建之前运行,或者至少已完成构建,并且正在从bin中复制现有dll,随后被继续构建覆盖。
我通过编辑解决方案的项目依赖项并确保具有post-build事件的项目依赖于未加载的项目来解决问题,现在pdb在调试期间加载。
答案 1 :(得分:31)
我只是从启动项目文件夹中删除了bin和obj文件夹并重建了解决方案。
答案 2 :(得分:10)
对我来说,我刚刚从IIS中删除了该项目并再次创建它并且工作正常
答案 3 :(得分:9)
对我而言,它有助于使用chkmatch工具,然后关闭并打开visual studio,进行清理和重建。现在我的pdb也被加载了。正如Nanhydrin指出的那样,你可以确保它来自Debug - &gt; Windows - &gt;模块 - 此视图仅在调试期间可访问。
答案 4 :(得分:6)
答案 5 :(得分:3)
提醒:将项目置于“调试”配置中......对于像我这样忘记并感到愚蠢的人。
答案 6 :(得分:2)
这里的派对迟到了 - 以防这是有帮助的。
我们有几个独立的网站(在Visual Studio的不同解决方案中)。在其中一个站点的初始加载时,我们正在调用另一个将返回图像的站点。
这两个网站都引用了一个常见的DLL,但是在一个网站上工作时,却没有意识到其他网站已经被放置在“发布”中。构建 - 加载网站后,重建了违规的DLL,但没有符号。
感谢Nanhydrin提到模块调试窗口(非常有帮助),以及使用post build事件让我走上正确的轨道。
答案 7 :(得分:2)
从解决方案中删除了项目,并将其再次添加到为我工作的解决方案中。 :)
答案 8 :(得分:1)
从另一个对我有用的帖子中回答:https://stackoverflow.com/a/28476665/5969306
- 在Visual Studio中:项目属性 - &gt;构建 - &gt;高级按钮 - &gt;调试信息下拉列表并确保该值不是“无”。
答案 9 :(得分:1)
我刚刚遇到这个问题并且认为我会在这里解决问题,因为我将来帮助其他人(甚至可能是我自己?)...
确保在附加到远程服务器上的进程时,“附加到”设置为
自动确定要调试的代码类型
要执行此操作,当提供服务器限定符并且可以看到进程列表时,请单击“附加到”输入旁边的“选择”按钮。
答案 10 :(得分:1)
答案 11 :(得分:0)
我的调试窗口中有这样一行:
模块符号&#39; MyModule.dll&#39;没装。
我删除了“优化代码”&#39;项目属性中的选项 - &gt;建立。错误消失了。
答案 12 :(得分:0)
此问题可能是由于项目中使用的错误引用dll 。
再次删除当前项目中的 obj 和 bin 文件夹以及构建项目。
答案 13 :(得分:0)
检查ASP.NET临时文件夹的权限:
objdump -D test | grep print_vec_long -A 10
0000000000000924 <print_vec_long>:
924: 02 00 4c 3c addis r2,r12,2
928: dc 75 42 38 addi r2,r2,30172
92c: a6 02 08 7c mflr r0
930: 10 00 01 f8 std r0,16(r1)
934: f8 ff e1 fb std r31,-8(r1)
938: 61 ff 21 f8 stdu r1,-160(r1)
93c: 78 0b 3f 7c mr r31,r1
940: 78 00 7f f8 std r3,120(r31)
944: 56 12 02 f0 xxswapd vs0,vs34
948: d0 ff 20 39 li r9,-48
应用程序池的用户必须拥有使用ASP.NET文件的子文件夹的权限,例如:
"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files"
答案 14 :(得分:0)
答案 15 :(得分:0)
我遇到了这个问题,尝试了所有其他解决方案(花了2天!我在哭……!两天了!)但最后我意识到我的文件已在GAC中注册,我删除了它,然后问题就解决了。解决了。
在命令提示符处,键入以下命令:
forkOS
答案 16 :(得分:0)
请检查您的dll的依赖性,如果您将其添加到解决方案中,则可能导致加载符号失败。