2008-09-30 34 views
38

我想使用远程调试。 我想调试的程序在机器上运行b。 Visual Studio在机器上运行a。远程调试时为什么没有加载符号?

计算机B上我有以下文件的文件夹:

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

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

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

未处理的异常在Program.exe文件0x7c812a7b:0xE0434F4D:0xe0434f4d

我可以继续进行或中断;继续时,异常会一再发生。所以我按了休息,并且发生了以下消息:

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

+0

调用堆栈是什么样的?可能没有加载符号,因为它在程序的内部引发了异常。唯一的其他问题是确保你在远程系统上拥有正确的exe。 – JeffFoster 2008-09-30 06:25:15

+1

@Xelluloid:你能否提供屏幕显示你如何附加过程并证明pdb与dll一起位于同一个文件夹中?最后,你还可以提供一个MODULE窗口的屏幕(在你附加了进程之后,点击ctrl-> alt-> u并让我们看看哪些模块已经加载。 – 2008-11-17 03:13:20

回答

24

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

+0

是否必须从客户端机器上复制?在远程计算机上安装了相同的Visual Studio项目,并且在bin文件夹中有它自己的.PDB文件,尽管我仍然收到'..pdb not loaded'消息 – DevDave 2013-05-30 10:45:04

+2

.pdb文件随您的程序集一起生成,所以 – 2013-05-30 15:05:32

+2

我的问题是,在我的开发机器上,所有的Visual Studio项目都在D:驱动器上,而服务器只有C:驱动器+我正在开发ASP.NET网站。我已经解决了这个问题的方法是去 - >项目属性 - >生成 - >输出路径 - > c:\ inetpub \ wwwroot \ mysite \ bin。这样,.pdb路径在我的开发机器和服务器上变得相同。 – kape123 2014-01-21 19:53:22

4

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

参考:如果你不地方.PDB文件到其中的调试代码中存在相同的目录

If broken it is...

5

在.NET远程调试将无法正常工作。

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

16
  1. 添加指向的位置您的开发机器上的共享文件夹。PDB文件
  2. 设置指向共享文件夹的远程计算机上称为_NT_SYMBOL_PATH环境变量您的开发机器

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

查看MS视频here

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

祝你好运!

3

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

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

3

我有同样的问题。发现了msdn forums我只是复制/粘贴答案在这里正确答案:

确保您使用msvsmon.exe的 正确的版本! 就是这样!我在远程调试C# 应用程序时遇到了同样的问题。我用的是64 msvsmon.exe因为服务器运行 的Windows Server 2008 64位,但 应用程序是针对x86写的,所以我 不得不为了运行 msvsmon.exe x86版本摆脱 这个烦人的错误。 没有其他需要。只需运行Msvsmon.exe的版本 在Visual Studio 2010中对应于目标架构 您的应用程序^ _^

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

后,您可以连接远程进程

3

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

这允许我调试我已经写好的任何正在运行的东西,即使它是一个动态调用的程序集(当我只用发布符号发布符号时,我无法为我的生活工作)。利用这个非常方便的功能!

1

我能够去项目属性,编译选项卡,并生成输出路径设置为我远程机器如 \ MYSERVER \ myshare的\ myappdir

在调试选项卡我有使用远程计算机得到这个工作检查,并设定为MYSERVER

0

据文档,用于管理(我试图连接到远程计算机上的管理窗口服务(内置针对.NET 4.5)与视觉工作室2012)的符号应远程机器上。因此,我只是在远程计算机上保存了符号(确保它们与远程计算机上的应用程序的模块/程序集相匹配),然后通过本地系统(其中vs正在运行)的符号设置共享并引用它。

注:服务和符号不必在同一目录作为其工作对我来说与2K12 + .NET 4.5的Windows服务。

的详细信息:

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

从链接摘录:

位置符号(.PDB)文件


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

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

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

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

问候!

1

我使用自定义构建配置时也碰到了这一点。 (DEV代替调试

要解决这个问题,我修改了项目属性 - >生成 - >输出 - >高级设置,保证了输出 - >调试信息设置为仅限pdb。默认发行配置通常设置为

0

转到工具 - >选项 - > Debugging->符号和路径添加到该可执行文件的.pdb文件。我的本地机器上的路径工作正常。

相关问题