【问题标题】:Why won't my symbols (pdb) load from a local path?为什么我的符号 (pdb) 不能从本地路径加载?
【发布时间】:2011-04-13 16:11:17
【问题描述】:

我刚刚构建了包含一些 C++ 和 C# 代码的应用程序,并将其安装在另一台机器上。当我连接远程调试器时,我可以调试 C++ 代码,并逐步完成它。但是,当我尝试调试 C# 代码时,似乎没有加载符号。我尝试在 Visual Studio 中调出模块窗格并浏览到正确的 .pdb 文件,但我只是收到一个消息框,告诉我它不匹配。

我不知道为什么会这样。我从这里使用了 chkmatch:http://www.debuginfo.com/tools/chkmatch.html - 报告我选择的 .exe 和 .pdb 匹配。

我已经清除了所有源代码,提取并重建了所有内容,所以我很确定我在 .pdbs 周围没有遇到什么老错误。

我发现了这个相关的问题The Symbol file MyFile.pdb does not match the module 但是,这更多的是做本地符号不匹配。我的本机符号匹配,只是符号拒绝匹配的 .net 程序集。

非常欢迎任何关于检查的建议。

谢谢。

更新:我已经成功加载符号了!但是......解决方案是将符号文件复制到远程计算机并将它们放在与远程计算机上的 .exe 和 dll 相同的文件夹中。 Visual Studio 似乎拒绝从我的本地机器加载它们。如果我在模块窗口中右键单击模块并选择“符号加载信息...”,这将显示它尝试从中加载符号的路径,并且其中包含 pdb 文件所在位置的正确本地路径机器。我查看了 pdb 的安全和访问控制属性,并为每个人授予了所有访问权限。

这真的很令人困惑,我确信过去我已经能够加载符号了。我想不出我所做的任何更改会突然导致它停止工作。

为什么 Visual Studio 拒绝从我的本地计算机加载符号?

【问题讨论】:

  • 使用 SDK 中的 signtool.exe。 signtool sign /v /ph /f "myCertfile.pfx" /p myCertfilePassword /t "timestamp.verisign.com/scripts.timestamp.dll" MyExeToSign.exe
  • 我会尝试禁用签名并重新开始看看会发生什么。
  • 好吧,也许不是签名。 VS 仍然坚持符号不匹配。
  • 我不明白这个问题。只签署发布版本,而不是调试版本。
  • 对不起,我认为我在关于签名的问题中的原始评论是红鲱鱼。我尝试在不签署文件的情况下进行调试,但没有效果。它仍然不会加载符号。

标签: c# debugging symbols


【解决方案1】:

就是这样。用于 .NET 远程调试的 PDB 始终从远程计算机加载。过去我一定是把 pdb 复制到远程机器上,但我忘记了。

http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/26/visual-studio-remote-debugging-and-pdb-files.aspx


啊。我知道为什么我有一段时间不用记住将 pdb 复制到远程机器上。我在远程机器上设置了一个网络文件夹映射,将驱动器映射到我的本地机器......这被用来解析路径。我有一个本地驱动器 S: 我保存所有源代码的地方,并且碰巧将网络映射到驱动器 S: 在远程机器上,所以一切正常。我想我会重新添加该映射,然后无需手动复制 pdb 即可进行调试。

对于远程调试托管代码来说,这似乎是一个方便的技巧。我只是没有意识到我正在这样做!

【讨论】:

    【解决方案2】:

    请注意,这在 Visual Studio 2013 中发生了变化。 自 2013 年起,PDB 必须位于本地计算机上。

    http://msdn.microsoft.com/en-us/library/ms241613.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多