.NET:如何使用exe和pdb文件查找一行代码的源代码

时间:2018-05-14 15:16:57

标签: c# .net debugging

我需要使用exe和pdb文件找到一行代码的源代码。 exe和pdb文件是用c#编写的。生成错误,并且Stacktrace声明了一个与我的源代码行号不同步的行号,因为exe是在前一段时间编译的。我试图弄清楚导致问题的代码行,因为它与exe有关。

1 个答案:

答案 0 :(得分:1)

简短回答:您无法从EXE和PDB获取原始源代码。

PDB和可执行文件都不包含原始源代码。 PDB包含IL和源文件行号之间的映射。因此,如果您的源文件已更改(在此上下文中已有),则PDB将IL映射到(可能)源文件中的错误行。

要获取引发异常的行的确切源代码,您需要原始源代码。如果您使用的是版本控制,则需要找到构建.exe的提交。 exe可能(但不一定非常)拥有有用的版本信息,可以帮助您回到编译exe的源的确切版本。

具体示例:在我的公司,我们使用持续集成,每次通过它编译代码时都会创建唯一的版本/内部版本号。它还允许您通过指向触发CI构建的Github提交的链接,查看给定版本号的用于构建此代码的代码。所以在我的情况下,我会查看.exe文件并获取版本/内部版本号(您应该能够轻松找到如何执行此操作)。然后我去CI,发现构建,并在我的情况下导航到Github以获取提交哈希我需要检查以进行调试,我要查看该版本的代码,瞧,PDB行号应该可靠地匹配我正在查看的代码。

如果您不使用CI,您可以尝试使用不太可靠的方法来确定构建exe的内容。例如,如果您知道编译EXE的日期,那么可能会为您提供您应该查看的源版本的线索,但这不一定是正确的。