为什么远程调试时没有加载符号?

Seb*_*ler 47 remote-debugging visual-studio-2008

我想使用远程调试.我要调试的程序在机器b上运行.Visual Studio在机器上运行a.

在机器b上我有一个包含以下文件的文件夹:

  • msvcr72.dll
  • msvsmon.exe
  • NatDbgDE.dll
  • NatDbgDEUI.dll
  • NatDbgEE.dll
  • NatDbgEEUI.dll

如果您认为某些文件丢失了,您是否还可以描述它们通常位于何处?

在下一步中msvsmon.exe,我在机器b上启动了我的程序.在机器上,我启动了Visual Studio 2008和我编写程序的解决方案.然后我选择"Debug - Attach to Process".我选择了"远程传输(仅限本机,无需身份验证)".我使用正确的IP作为限定符并采取了正确的过程(program.exe).片刻之后,弹出窗口中出现以下消息:

program.exe中0x7c812a7b处的未处理异常:0xE0434F4D:0xe0434f4d

我可以继续或休息; 继续时,异常会一次又一次地发生.所以我按下了break并发出以下消息:

没有为任何调用堆栈帧加载符号.源代码无法显示.

Kyl*_*man 27

确保将使用程序集生成的.PDB文件复制到远程计算机上的同一文件夹中.这将允许调试器拾取调试符号.

  • 实际上,在远程计算机上使用PDB文件没有帮助 - 我仍然得到"此文档没有加载符号"......? (8认同)
  • .pdb文件与程序集一起生成,因此它们对于每个版本都是新的,应该被复制. (2认同)
  • 对我来说问题是在我的开发机器上我的所有Visual Studio项目都在D:驱动器上,而服务器只有C:驱动器+我正在开发ASP.NET网站.我解决这个问题的方法是去 - >项目属性 - >构建 - >输出路径 - > c:\ inetpub\wwwroot\mysite\bin.这样,我的开发机器和服务器上的.pdb路径变得相同. (2认同)
  • 我知道这是一个过时的答案,信息在过去的8年中可能有所变化,但这只是更新,因为这是公认的答案。查看@ scrat789的答案。通过遵循该帖子,我能够在不从本地计算机复制PDB的情况下使调试器正常工作。 (2认同)

小智 16

  1. 在您的开发计算机上添加一个共享文件夹,指向.pdb文件的位置
  2. 设置_NT_SYMBOL_PATH在远程计算机上调用的环境变量,该变量指向dev计算机上的共享文件夹

远程调试器现在将在您的开发机器中搜索符号.无需为每个构建复制它们.

在此处查看MS Video .

开始观看8-9分钟.他演示了如何设置远程调试器以从开发机器上的驱动器共享加载符号.

祝好运!

  • 你能重新发布链接吗?现在已经死了. (2认同)

scr*_*789 14

  • 在Visual Studio 2010中的"工具"菜单上,选择"选项".
  • 在"选项"对话框中,打开"调试"节点,然后单击"常规".
  • 选中"根据需要显示所有设置"并找到" 仅启用我的代码" (仅限托管)
  • 取消选中它,然后单击"确定"

您可以附加远程进程

  • 调用堆栈位置被填充,但我仍然没有得到源代码 (2认同)

180*_*ION 5

0xE0434F4D 是 CLR 的异常(即托管代码)。您需要使用身份验证进行远程调试并选择调试托管代码。或者,也可以使用一些调试器扩展来提取托管异常信息,但这有点困难。

参考:

如果坏了就是...


art*_*r02 5

如果不将.PDB文件放在调试代码所在的同一目录中,则.NET中的远程调试将不起作用.

如果VS仍无法找到调试源,则调试代码和VS项目源版本不同.解决方案是重建和重新部署项目.