繁体   English   中英

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

[英].NET : How to find the source code for a line of code using the exe and pdb file

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

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

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

要获得引发异常的行的确切源代码,您需要原始源代码。 如果使用版本控制,则需要查找生成.exe的提交。 该exe可能(但不一定)具有有用的版本信息,可以帮助您返回到exe编译源的确切版本。

具体示例:在我公司,我们使用持续集成,每次通过它编译代码时,都会创建一个唯一的版本/内部版本号。 它还可以让您通过给定触发了CI构建的Github提交的链接,查看给定版本号所使用的代码。 因此,就我而言,我将查看.exe文件并获取版本/内部版本号(您应该能够轻松找到执行此操作的方法)。 然后,我将转到CI,找到该版本,然后导航至Github以获取提交哈希(我需要签出进行调试),然后签出该版本的代码,瞧, PDB行号应该可靠地匹配我正在查看的代码。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM