我刚刚构建了我的应用程序,其中包含一些C ++和C#代码,并将其安装在另一台机器上。当我连接远程调试器时,我可以调试C ++代码,然后逐步调试它。但是,当我尝试调试C#代码时,似乎没有加载符号。我已经尝试在visual studio中调出模块窗格并浏览了正确的.pdb文件,但我只是得到一个消息框告诉我它不匹配。
我无法弄清楚为什么会这样。我在这里使用了chkmatch:http://www.debuginfo.com/tools/chkmatch.html - 报告我选择的.exe和.pdb匹配。
我已经擦除了所有的来源,取出并重建了所有内容,所以我很确定我没有遇到一些旧的错误.pdbs。
我发现了这个相关的问题The Symbol file MyFile.pdb does not match the module但是,更多的是本地符号不匹配。我的原生符号匹配,它只是符号拒绝匹配的.net程序集。
非常欢迎任何有待检查的建议。
感谢。
更新:我已设法立即加载符号!但是......解决方案是将符号文件复制到远程计算机并将它们放在与远程计算机上的.exe和dll相同的文件夹中。 Visual Studio似乎拒绝从我的本地计算机加载它们。如果我右键单击模块窗口中的模块并选择“符号加载信息...”,则会显示它尝试加载符号的路径,其中包含pdb文件在我的位置的正确本地路径机。我已经查看了pdbs的安全性和访问控制属性,并给予了所有人访问权限。
这真令人困惑,我相信在过去我已经能够加载符号了。我想不出任何我改变过的东西会突然导致它停止工作。
为什么Visual Studio拒绝从本地计算机加载符号?
答案 0 :(得分:8)
就是这样。用于.NET远程调试的PDB始终从远程计算机加载。在过去,我一定是把pdb复制到远程机器上,但我忘了它。
阿。我知道为什么我不必记得将pdb的副本复制到远程机器上一段时间。我在远程计算机上设置了一个网络文件夹映射,将驱动器映射到我的本地计算机......这用于解析路径。我有一个本地驱动器S:我保留了所有源代码,并且碰巧是网络映射,以便在远程计算机上驱动S:所以一切正常。我想我会重新添加该映射,然后我可以调试而无需手动复制pdb。
这似乎是远程调试托管代码的一个方便技巧。我只是没有意识到我在做这件事!
答案 1 :(得分:3)
请注意,Visual Studio 2013已更改此设置。 截至2013年,PDB必须在本地机器上。