在Visual Studio远程调试中未命中断点

17
请不要将其标记为重复内容,因为我已经看过所有的解决方案,但对于我的情况都没有起作用。
我有两台机器devMachine和serverMachine。
在devMachine上,我使用Visual Studio开发应用程序。现在我有一个简单的控制台应用程序。我的需求是需要在serverMachine上运行这个控制台应用程序,并通过远程调试从devMachine进行调试。
根据Microsoft文档中所述,在serverMachine上安装了Remote Debugging工具,并将身份验证模式设置为Native(无身份验证),然后在serverMachine上运行Console Application。
现在,我在devMachine的Visual Studio中附加了远程进程。一切正常,但唯一的问题是断点在Visual Studio中没有被击中。
注意:我已经将所需的.pdb文件放置在serverMachine中,并在devMachine的Visual Studio中设置了该.pdb文件路径(工具->选项->调试->符号)。
有人能帮我解决这个问题吗?

5个回答

11

如果您在断点上悬停时看到的错误消息与源文件不同,您可以尝试禁用“工具/选项/调试”中的“启用源文件与原始版本完全匹配”选项。

在“模块”窗口中,PDB是否已加载? 如果没有,请尝试手动加载它们(从“模块”窗口,右键单击PDB并加载)- 如果失败会有错误消息吗?

--> 您可能面临的情况是本地计算机上的源文件与远程计算机上的源文件不同。 尝试将所有内容复制过来,看看是否有效(PDB将位于EXE相同的文件夹中)。


当我尝试手动加载符号时,它说在此文件夹中找不到匹配的符号文件。你知道这是什么意思吗? - Sky
@ sky - 这意味着在该文件夹中找不到匹配的PDB文件 - 所以要么您指向了错误的文件夹,要么您那里的PDB文件与您尝试调试的版本不同,您需要指向您正在尝试调试的版本。 - Maria
@Ghiondea 是的,你说得对。我已经想通了。还是谢谢你。 - Sky

3

远程调试器无法命中断点的原因有两个:

  1. 符号不正确。

  2. 在调试时使用了错误的 .Net 框架(您可以在 Visual Studio 的“附加到进程”窗口中进行选择)。


2
不要附加,只需设置远程调试。在构建后将所有项目文件复制到服务器上相同位置和名称的文件夹中。
图片参考:enter image description here
图片参考:enter image description here

1
我在使用远程调试器时,遇到了Visual Studio无法在断点处中断的问题。虽然看起来一切都已正确设置好,但我仍无法找到答案。最后,当我尝试手动将VS调试附加到进程时(VS菜单 -> 调试 -> 附加到进程...),问题终于出现了。由于某种原因,同一个应用程序池中有多个进程(应该只有一个进程,不确定其他进程来自哪里)。我登录我的IIS服务器并杀死了所有属于我的应用程序池的进程,然后重新启动了IIS应用程序。当我看到应用程序池只有一个进程(正如我所期望的那样)时,我尝试在Visual Studio中进行调试,并成功地将其附加到了正确的进程上。结果发现,当同一应用程序池中有多个进程时,它会附加到“错误”的进程上。

这个答案是正确的,而且遇到了相同的循环。一旦我为基于 .NET Framework 4.8 的 ASP.NET MVC 应用程序创建了指定的应用程序池,我就摆脱了断点符号附近的警告,但 VS 仍然不会停止。可能是由于 Mvc.dll 或任何其他无法处理的 .net 库中的异常! - sanpat

0
看了你的屏幕截图,可能是因为断点在“main”函数中,而调试器可能在“main”完成之前就已经结束了。
建议: 在第一个断点上面的“main”函数中加入一些人工等待/延迟代码,比如20秒,以便在“main”完成之前给自己足够的时间来附加到进程上。

不,断点并没有激活,因为它们显示为空心圆圈,并带有黄色警告标志。 - Chris Peacock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接