54

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

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

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

如果您认为某些文件丢失了,您能否描述一下它们通常的位置?

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

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

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

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

4

14 回答 14

30

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

于 2008-09-30T06:23:03.257 回答
19
  • 在 Visual Studio 2010 的“工具”菜单上,选择“选项”。
  • 在“选项”对话框中,打开“调试”节点,然后单击“常规”。
  • 如果需要,选中显示所有设置并找到启用仅我的代码 (仅限托管)
  • 取消选中它并单击确定

在您可以附加远程进程之后

于 2011-07-13T12:26:55.820 回答
18
  1. 在您的开发机器上添加一个指向 .pdb 文件位置的共享文件夹
  2. 在远程机器上设置一个环境变量_NT_SYMBOL_PATH,指向你的开发机器上的共享文件夹

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

在此处查看 MS 视频。

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

祝你好运!

于 2009-07-17T17:17:47.853 回答
6

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

如果VS还是找不到调试的源码,说明调试的代码和VS工程源码不是同一个版本。解决方案是重建和重新部署项目。

于 2008-09-30T07:21:10.137 回答
5

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

参考:

如果坏了就是...

于 2008-09-30T06:34:27.067 回答
4

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

Visual Studio (VS2008) 中的远程调试,Windows 窗体应用程序

于 2009-10-14T04:34:45.837 回答
4

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

这使我能够在我编写的任何正在运行的东西附近进行调试,即使它是一个动态调用的程序集(当只使用程序集发布符号时,我无法终生工作)。利用这个非常方便的功能!

于 2013-12-12T21:02:44.907 回答
3

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

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

于 2011-05-18T06:24:13.870 回答
2

我在使用自定义构建配置时也遇到了这个问题。(开发而不是调试

为了纠正这个问题,我修改了 Project Properties-->Build-->Output-->Advanced 设置并确保 Output-->Debug Info 设置为fullpdb-only。默认发布配置通常设置为none

于 2014-12-27T17:49:34.093 回答
1

我可以通过转到项目属性、编译选项卡并将构建输出路径设置到我的远程计算机来完成这项工作,例如 \myserver\myshare\myappdir

在调试选项卡中,我选中了使用远程机器并将其设置为 myserver

于 2014-02-14T15:01:16.253 回答
1

转到Tools->Options->Debugging->Symbols并添加可执行文件的 .pdb 文件的路径。我本地机器上的路径运行良好。

于 2016-07-11T16:31:58.343 回答
0

根据文档,对于托管(我尝试使用 Visual Studio 2012 在远程计算机上附加到托管 Windows 服务(针对 .net 4.5 构建)),符号应该位于远程计算机上。

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

注意:服务和符号不必与使用 2k12 + .net 4.5 windows 服务为我工作的目录位于同一目录中。

详情:

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

摘自链接:

定位符号 (.pdb) 文件


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

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

•<strong>托管应用程序的符号文件必须位于远程计算机上。

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

问候!

于 2014-04-24T09:39:17.650 回答
0

我遇到了这个问题,上述解决方案并没有为我解决这个问题。就我而言,我的 VS2010 解决方案中有很多项目。我试图远程调试的项目没有在我的 VS2010 解决方案中设置为启动项目,因为我的 make 脚本不太正确。

我在我试图调试和选择的解决方案中右键单击项目Set as StartUp Project,然后我的符号正确加载并且我的断点被命中。

于 2019-01-22T13:21:08.000 回答
0

我在远程调试时遇到了同样的问题,在 VS 2008 上通过以下步骤解决了:

  1. 您将本地 pdb 文件与二进制文件一起复制
  2. 运行与构建应用程序相同版本的 msvmon,如果您的应用程序是为 x86 架构构建的,则需要运行 x86 版本的 msvmon,即使您在 x64 机器上运行它也是如此。当您尝试运行时它会发出警告,但它应该运行。
于 2019-02-21T07:33:20.110 回答