当 运行 debugger from .exe 时,如何查看源代码?

When running debugger from .exe, how do I view the source code?

我正在尝试查看已安装应用程序的源代码,以便对其进行调试。我的调试器是 Visual Studio,使用 .Net 4.5。要打开文件,我在 Visual Studio 中选择了 "Open from source code",然后我选择了 applicationName.exe 文件。 VS 似乎已经打开文件,我现在可以 运行 来自 Visual Studio 的文件。

但是,我无法查看源代码、添加中断或单步执行应用程序。当我使用 IntelliTrace 的 "Break all" 选项时,应用程序似乎被挂起,但随后我只是被告知 "Code not running: The current thread is not currently running code or the call stack could not be obtained." 然后当我点击 "Continue" 时,应用程序从它停止的地方恢复。

我该如何解决这个问题,才能真正查看源代码并插入断点?

How do I get around this so I can actually view the source code and insert break points?

您需要为正在调试的exe文件准备相应的.pdb文件。 .pdb 文件用于“将您在 类、方法和其他代码的源文件中创建的标识符映射到项目的已编译可执行文件中使用的标识符。 .pdb 文件还将源代码中的语句映射到可执行文件中的执行指令。”调试器需要这种类型的文件来定位源文件中的代码行。

详细解释请参考: https://msdn.microsoft.com/en-us/library/ms241613.aspx

以上link也介绍了调试时如何加载.pdb文件和源文件

总的来说,Leo-MSFT 所写的是真实的,对于 .NET 应用程序,在源代码和 PDB 方面要容易一些,因为它们可以从 .NET 程序集生成。它不会是确切的源代码,但可以理解接近的东西。

您可以使用 dnSpy 之类的工具打开此类程序集并在那里调试并显示源代码。

如果你需要坚持 Visual Studio 我推荐使用 JetBrains dotPeek。它可以充当符号服务器(因此在需要时提供 PDB)。

您将它添加到 VS(符号服务器选项),然后当 VS 请求 PDB 时,它可以为您即时生成一个,您可以进行调试。