为什么在远程调试时没有加载符号?
我想使用远程调试。
我要调试的程序在计算机b上运行。
Visual Studio在计算机a上运行。
在计算机b上,我有一个包含以下文件的文件夹:
- msvcr72.dll
- msvsmon.exe
- NatDbgDE.dll
- NatDbgDEUI.dll
- NatDbgEE.dll
- NatDbgEEUI.dll
如果我们认为缺少某些文件,是否还可以描述它们通常位于何处?
在下一步中,我在计算机b上启动了msvsmon.exe和程序。在计算机a上,我启动了Visual Studio 2008以及编写该程序的解决方案。然后,我选择"调试添加到进程"。我选择了"远程传输(仅本地,不进行身份验证)"。我使用正确的IP作为限定符,并进行了正确的处理(program.exe)。一段时间后,在弹出窗口中出现以下消息:
Unhandled exception at 0x7c812a7b in program.exe: 0xE0434F4D: 0xe0434f4d
我可以继续或者休息;当继续时,该异常一次又一次地发生。所以我按下break并发生以下消息:
No symbols are loaded for any call stack frame. The source code cannot be displayed.
解决方案
确保将程序集生成的.PDB文件复制到远程计算机上的同一文件夹中。这将允许调试器提取调试符号。
0xE0434F4D是CLR的例外(即托管代码)。我们需要使用身份验证进行远程调试,然后选择调试托管代码。另外,也可以使用一些调试器扩展来提取托管异常信息,但这需要更多的工作。
参考:
如果坏了...
如果我们不将.PDB文件放在已调试代码所在的目录中,则.NET中的远程调试将无法进行。
如果VS仍然找不到调试源,则调试代码和VS项目源不是同一版本。解决方案是重建和重新部署项目。
- 在开发机器上添加一个共享文件夹,该文件夹指向.pdb文件的位置
- 在远程机器上设置一个名为_NT_SYMBOL_PATH的环境变量,该变量指向开发机器上的共享文件夹
远程调试器现在将在开发机上搜索符号。无需为每个版本复制它们。
请参阅此处的MS Video。
开始观看8-9分钟。他演示了如何设置远程调试器以从开发计算机上的驱动器共享中加载符号。
祝你好运!
1800信息正确,我们必须使用Windows身份验证进行远程调试才能调试托管代码,否则我们将无法加载托管程序集的符号。使它与身份验证一起使用非常棘手,因为它要求两台机器上的本地帐户都使用相同的密码,等等。这个问题和每个人的答案对于使该工作都非常有用。
Visual Studio(VS2008),Windows Forms应用程序中的远程调试