首页 文章

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

提问于
浏览
38

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

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

  • msvcr72.dll

  • msvsmon.exe

  • NatDbgDE.dll

  • NatDbgDEUI.dll

  • NatDbgEE.dll

  • NatDbgEEUI.dll

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

在下一步中,我在机器b上启动了 msvsmon.exe 和我的程序 . 在机器上,我启动了Visual Studio 2008和我编写程序的解决方案 . 然后我选择"Debug - Attach to Process" . 我选择了"Remote Transport (Native Only with no authentication)" . 我使用正确的IP作为限定符并采取了正确的过程(program.exe) . 片刻之后,弹出窗口中出现以下消息:

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

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

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

12 回答

  • 3

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

  • 5
    • 在开发计算机上添加指向.pdb文件位置的共享文件夹

    • 在远程计算机上设置一个名为 _NT_SYMBOL_PATH 的环境变量,该变量指向dev计算机上的共享文件夹

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

    请参阅MS Video here .

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

    祝好运!

  • 16
    • 在Visual Studio 2010的“工具”菜单上,选择“选项” .

    • 在“选项”对话框中,打开“调试”节点,然后单击“常规” .

    • 检查如果需要,显示所有设置并找到 Enable Just My Code (仅限管理)

    • Uncheck it 并单击“确定”

    您可以附加远程进程

  • 11

    如果您没有调试代码存在的地方,则.NET中的远程调试将不起作用 .

    如果VS仍无法找到调试源,则调试代码和VS项目源为 not the same version . 解决方案是重建和重新部署项目 .

  • 1

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

    参考文献:

    If broken it is...

  • 24

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

    Remote Debugging in Visual Studio (VS2008), Windows Forms Application

  • 1

    我有同样的问题 . 在msdn forums上找到了答案我将在这里复制/粘贴正确的答案:

    确保您使用的是正确版本的msvsmon.exe!这就是全部!我在远程调试C#应用程序时遇到了同样的问题 . 我使用x64 msvsmon.exe,因为服务器运行Windows Server 2008 64位,但该应用程序是为x86编写的,所以我必须运行x86版本的msvsmon.exe才能摆脱这个恼人的错误 . 不需要任何其他东西 . 只需运行与应用程序的目标体系结构相对应的msvsmon.exe版本^ _ ^

  • 3

    虽然上面的答案是正确的,但我遇到的情况是,使用正在调试的程序集构建的PDB在远程位置就位,并且没有被拾取 . 如果您使用的是TFS或其他支持发布调试符号的构建机制,我建议您这样做 . 然后在Visual Studio选项>调试>符号中,您可以将该位置添加到符号服务器选项,以便在找到匹配时随时加载这些符号 .

    这让我调试了近乎任何正在运行的东西,即使它是一个动态调用的程序集(当我只发布符号时,我无法工作的东西)部件) . 利用这个非常方便的功能!

  • 4

    我可以通过转到Project Properties,Compile选项卡并将Build输出路径设置为我的远程机器来实现这一点,例如\ myserver \ myshare \ myappdir

    在调试选项卡中,我已使用远程机器检查并设置为myserver

  • 0

    我在使用自定义 build configuration 时遇到了这个问题 . (DEV而不是Debug)

    为了解决这个问题,我修改了项目属性 - >构建 - >输出 - >高级设置,并确保输出 - >调试信息设置为 fullpdb-only . 默认 Release 配置通常设置为 none .

  • 3

    根据文档,对于托管(我尝试使用visual studio 2012附加到远程机器上的托管Windows服务(针对.net 4.5构建)),符号应为 on the remote machine .

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

    注意:服务和符号不需要与使用2k12 .net 4.5 Windows服务的工作目录相同 .

    for details:

    http://msdn.microsoft.com/en-us/library/bt727f1t(v=vs.100).aspx

    Excerpt from the link:

    找到符号(.pdb)文件


    符号文件包含已编译可执行文件的调试信息 . 要调试的应用程序的符号文件必须是编译应用程序可执行文件时创建的文件 . 符号文件也必须位于调试器可以找到它们的位置 .

    •本机应用程序的符号文件必须位于Visual Studio主机上 .

    The symbol files for managed applications must be located on the remote computer.

    •混合(托管和本机)应用程序的符号文件必须位于Visual Studio主机和远程计算机上 .

    问候!

  • 0

    转到 Tools->Options->Debugging->Symbols 并将路径添加到可执行文件的.pdb文件中 . 我本地机器上的路径工作正常 .

相关问题