为什么在远程debugging时没有加载符号?

我想使用远程debugging。 我要debugging的程序在机器上运行。 Visual Studio在机器上运行

在机器上我有一个文件夹与下列文件:

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

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

在下一步,我启动了msvsmon.exe和我的程序在机器上。 在机器上,我启动了Visual Studio 2008和我的解决scheme,编写程序。 然后我select“debugging – 附加到进程”。 我select了“远程传输(仅限本地无身份validation)”。 我用正确的IP作为限定符,并采取正确的过程(program.exe)。 过了一会儿,popup窗口中出现以下消息:

Program.exe中0x7c812a7b未处理的exception:0xE0434F4D:0xe0434f4d

我可以继续或rest; 继续时,exception会一再发生。 所以我按了rest,发生了以下消息:

任何调用堆栈帧都不会加载符号。 源代码不能显示。

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

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

远程debugging器现在将search您的开发机器符号。 没有必要复制他们的每一个构build。

在这里看MSvideo。

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

祝你好运!

  • 在Visual Studio 2010的工具菜单上,select选项。
  • 在“选项”对话框中,打开“debugging”节点,然后单击“常规”。
  • 选中显示所有设置,如果需要,find启用只是我的代码 (只pipe理)
  • 取消选中它并单击确定

您可以附加远程进程后

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

如果VS仍然无法finddebugging源,那么debugging代码和VS项目源不是同一个版本 。 解决scheme是重build和重新部署项目。

0xE0434F4D是CLR的一个例外(即托pipe代码)。 您需要使用身份validation进行远程debugging,并selectdebugging托pipe代码。 或者,可以使用一些debugging器扩展来提取出托pipe的exception信息,但这样做有点困难。

参考文献:

如果破碎是…

1800信息是正确的,你必须使用Windows身份validation进行远程debugging,以便debugging托pipe代码,否则将无法加载托pipe程序集的符号。 获得这个authentication是非常棘手的,因为它需要在两台机器上使用相同密码的本地帐户等等。 这个问题和每个人的答案对于这个工作是非常有用的。

在Visual Studio(VS2008),Windows窗体应用程序中进行远程debugging

我有同样的问题。 在MSDN论坛上find答案我只是在这里复制/粘贴正确的答案:

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

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

这使得我可以在我正在运行的任何东西附近进行debugging,即使它是一个dynamic调用的程序集(当我只用程序集发布符号时,我无法为我的生活工作)。 利用这个非常方便的function!

我可以通过转到项目属性,编译选项卡,并设置生成输出path到我的远程机器如\ myserver \ myshare \ myappdir

在debugging选项卡我有使用远程机器检查并设置为myserver

在使用自定义生成configuration时,我也遇到了这个问题。 ( DEV而不是debugging

为了解决这个问题,我修改了项目属性 – >编译 – >输出 – >高级设置,并确保输出 – >debugging信息设置已满仅限pdb 。 默认的发布configuration通常设置为

根据文档,对于托pipe(我试图在Visual Studio 2012远程机器上连接到一个托pipe的Windows服务(构build对.net 4.5))符号应该在远程机器上。

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

注意:服务和符号不需要和2k12 + .net 4.5 windows服务在同一个目录下。

了解详情:

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

摘自链接:

查找符号(.pdb)文件


符号文件包含编译的可执行文件的debugging信息。 要debugging的应用程序的符号文件必须是在编译应用程序可执行文件时创build的文件。 符号文件也必须位于debugging器可以find它们的地方。

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

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

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

问候!

转至工具 – >选项 – >debugging – >符号 ,并将path添加到可执行文件的.pdb文件。 我的本地机器上的path工作正常。