我想使用远程调试。我要调试的程序在机器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并出现了以下消息:

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

有帮助吗?

解决方案

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

其他提示

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

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

查看微软视频 这里.

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

祝你好运!

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

可以附加远程进程后

如果不这样做,.NET 中的远程调试将无法工作 将 .PDB 文件放入同一目录中 调试代码所在的位置。

如果VS仍然找不到源码进行调试,则调试后的代码和VS项目源码是 不是同一个版本. 。解决方案是重建并重新部署项目。

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

参考:

如果坏了那就是...

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

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

我也有同样的问题。找到了答案 msdn 论坛 我将在这里复制/粘贴正确的答案:

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

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

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

我能够通过转到项目属性,编译选项卡并将构建输出路径设置为远程计算机,例如 myserver myShare myappdir来实现此功能

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

我在使用自定义的时候也遇到了这个问题 构建配置. (DEV而不是调试)

为了纠正这个问题,我修改了项目属性-->构建-->输出-->高级设置,并确保输出-->调试信息设置为 满的 或者 仅 pdb. 。默认 发布 配置通常设置为 没有任何.

工具->选项->调试->符号 并添加可执行文件的 .pdb 文件的路径。我本地机器上的路径运行良好。

根据文档,对于托管(我尝试使用 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 主机上。

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

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

问候!

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

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

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

  1. 您将本地 pdb 文件与二进制文件一起复制
  2. 运行与构建应用程序相同版本的 msvmon,如果您的应用程序是为 x86 架构构建的,则需要运行 x86 版本的 msvmon,即使您在 x64 计算机上运行它也是如此。当您尝试运行时它会发出警告,但它应该运行。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top