Visual studio 2008 为什么远程调试时不加载符号?

Visual studio 2008 为什么远程调试时不加载符号?,visual-studio-2008,remote-debugging,Visual Studio 2008,Remote Debugging,我想使用远程调试。 我要调试的程序在机器b上运行。 Visual Studio在计算机a上运行 在机器b上,我有一个包含以下文件的文件夹: msvcr72.dll msvsmon.exe NatDbgDE.dll NatDbgDEUI.dll NatDbgEE.dll NatDbgEEUI.dll 如果你认为有些文件丢失了,你能描述一下它们通常在哪里吗 在下一步中,我在机器b上启动了msvsmon.exe和我的程序。在机器a上,我启动了VisualStudio2008,并使用我的解决方案编写

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

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

  • msvcr72.dll
  • msvsmon.exe
  • NatDbgDE.dll
  • NatDbgDEUI.dll
  • NatDbgEE.dll
  • NatDbgEEUI.dll
如果你认为有些文件丢失了,你能描述一下它们通常在哪里吗

在下一步中,我在机器b上启动了
msvsmon.exe
和我的程序。在机器a上,我启动了VisualStudio2008,并使用我的解决方案编写了程序。然后我选择“调试-附加到进程”。我选择了“远程传输(仅限本机,无身份验证)”。我使用了正确的IP作为限定符,并采用了正确的进程(program.exe)。一段时间后,弹出窗口中出现以下消息:

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

我可以继续或中断;继续时,异常会一次又一次地发生。因此,我按下break,出现以下消息:

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


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

0xE0434F4D是CLR的一个例外(即托管代码)。您需要使用身份验证进行远程调试,并选择调试托管代码。或者,也可以使用一些调试器扩展来提取托管异常信息,但这是一项更为艰巨的工作

参考资料:


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

如果VS仍然找不到要调试的源代码,则调试的代码和VS项目源代码的版本不相同。解决方案是重建和重新部署项目

  • 在开发人员计算机上添加指向.pdb文件位置的共享文件夹
  • 在远程计算机上设置一个名为
    \u NT\u SYMBOL\u PATH
    的环境变量,该变量指向开发人员计算机上的共享文件夹
  • 远程调试器现在将在您的开发人员计算机上搜索符号。无需为每个构建复制它们

    请参阅MS视频

    开始看8-9分钟的电视节目。他演示了如何设置远程调试器以从开发计算机上的驱动器共享加载符号


    祝你好运

    1800信息正确,您必须使用Windows身份验证进行远程调试才能调试托管代码,否则将无法加载托管程序集的符号。要使其与身份验证一起工作是相当棘手的,因为它需要两台机器上的本地帐户都具有相同的密码,等等。这个问题和每个人的答案对于实现这一目标非常有用


    我也有同样的问题。在上找到答案,我将在此处复制/粘贴正确答案:

    确保您正在使用 msvsmon.exe的正确版本!!! 就这些!我在远程调试C时遇到了同样的问题# 应用我用的是x64 msvsmon.exe,因为服务器正在运行 Windows Server 2008 64位,但 应用程序是为x86编写的,所以我 必须运行x86版本的 msvsmon.exe以摆脱 这个讨厌的错误。 没有其他需要。只需运行msvsmon.exe的版本即可 对应于目标体系结构 你的申请^_^

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

    在您可以连接远程进程后,如果上述答案正确,我遇到了一些实例,其中使用正在调试的程序集构建的PDB位于远程位置,并且没有被拾取。如果您正在使用TFS或其他支持发布调试符号的生成机制,我建议您这样做。然后,在Visual Studio选项>调试>符号中,可以将该位置添加到符号服务器选项中,以便在找到匹配的符号时加载这些符号


    这使我能够调试我编写的任何正在运行的程序,即使它是一个动态调用的程序集(在我的整个生命周期中,仅使用程序集发布符号时,我无法使用它)。利用这个非常方便的功能

    我可以通过转到“项目属性”、“编译”选项卡并设置远程机器的生成输出路径来实现这一点 \myserver\myshare\myappdir


    在“调试”选项卡中,我已选中“使用远程计算机”,并根据文档将其设置为myserver

    ,对于托管(我尝试使用visual studio 2012在远程计算机上连接到托管windows服务(基于.net 4.5构建)),符号应位于远程计算机上的

    所以,我只是在远程机器上保留符号(确保它们与远程机器上应用程序的模块/程序集相匹配),共享它,并通过本地系统的符号设置(vs正在运行)引用它

    注意:该服务和符号不必与我使用2k12+.net 4.5 windows服务时使用的目录相同

    有关详细信息:

    摘自链接:

    定位符号(.pdb)文件


    符号文件包含已编译可执行文件的调试信息。要调试的应用程序的符号文件必须是编译应用程序可执行文件时创建的文件。多愁善感