当前不会命中断点 - 远程调试

Posted

技术标签:

【中文标题】当前不会命中断点 - 远程调试【英文标题】:The breakpoint will not currently be hit - Remote Debugging 【发布时间】:2015-12-28 01:06:04 【问题描述】:

我在调试 DLL (C#) 时遇到问题。 DLL 在服务器上运行,我想使用 Visual Studio 2010 中的远程调试器工具对其进行调试。

我实际上可以附加到进程,但不知何故,我总是在断点处遇到以下问题: “当前不会命中断点。没有为此文档加载任何符号。”

编辑:.pdb 也在服务器上。

【问题讨论】:

您需要为您尝试调试的 DLL 提供相应的 .pdb 文件。 对不起,我没有提到。 “.pdb”也在服务器上。 那么可能是VS没有找到它(我认为你可以通过一些设置指定.pdb文件的实际位置)或者有时你需要自己编译DLL并使用那些.pdb 文件。 没有看到代码,很难判断,但是你确定代码是可访问的(即不在一个永远不会执行的分支中,因为它的计算结果为if (false))? 服务器 == 发布版本? VS能找到release build PDB吗?我个人认为它不会在服务器上找到它。在本地配置符号路径。 【参考方案1】:

您如何获取远程服务器上的 .pdb 和 .dll 文件?它们需要与您本地机器上的内容完全匹配。查看文件的大小并确保它们在远程服务器和本地计算机之间匹配。如果它们是在不同的机器上构建或使用不同的构建配置构建的,它们将不匹配。您可以将 bin 文件夹从本地计算机复制/粘贴到远程服务器,以确保文件完全匹配。 (先备份服务器的bin)

您是否参与了正确的流程?如果您不确定,请尝试附加到几个不同的进程。如果您的断点有效,那么这些新进程之一就是正确的。

尝试将远程服务器的 bin 文件夹添加为符号文件位置。这可以在选项 > 工具 > 调试 > 符号中完成。这将告诉 Visual Studio 检查该文件夹中的符号文件。

在遇到同样的问题后,我写了this blog post 关于这个,它可能有更多的信息会有所帮助。

【讨论】:

谢谢你,添加服务器的 bin 文件夹是关键 - 似乎没有其他人提到过! 我已将远程服务器上的 bin 文件夹替换为我 PC 中的文件夹。否则documentation 提到我们必须完全从运行 Visual Studio 的 PC 发布源代码以进行远程调试。 可能,在.pdb文件中不同路径的不同机器上编译符号(.dll、.pdb)是可以的。但它们必须具有相同的配置。 IE。调试或发布等

以上是关于当前不会命中断点 - 远程调试的主要内容,如果未能解决你的问题,请参考以下文章

windbg断点命中时,其它线程在运行吗

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

找不到远程调试 Azure Functions 符号

远程调试 .Net 应用程序“没有为此文档加载任何符号”时出现问题。

仅调试第一个断点命中的线程

无法调试Windows服务 - 断点当前不会被命中