为什么在远程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符号。
- 在您的开发机器上添加一个指向.pdb文件位置的共享文件夹
- 在远程机器上设置一个名为
_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工作正常。