如何从链接器映射中找出源行号

时间:2009-03-15 13:17:10

标签: c++ visual-studio-2008 linker

出于某种原因,我只有我正在调试的应用程序的链接器映射。有一个崩溃日志表示在偏移“myApp.exe!+ 4CA24”时发生了崩溃。

从链接器映射我能够找到该方法。假设这是偏移“myApp.exe!+ 4BD7C”。

无论如何只使用上述信息来确定源代码中的确切行?

我知道如果我们有一个.cod文件,它很容易,但我没有(并且无法创建)。

2 个答案:

答案 0 :(得分:2)

如果只有MAP文件,那么你可以做的最好的事情就是研究反汇编程序中的EXE文件,并比较你从编译器生成代码的常用方法中识别的结构。这些你必须学习。这意味着至少要学习一些汇编程序。这是一个很好的知识,将来会帮助你,特别是如果你需要调试很多代码。

稍微简单一点的方法是在处理器指令上下载免费的英特尔书籍,然后查看它们的尺寸。通过这种方式,您可以计算出错误指令的方式。为了获得最佳结果,这两种方法应该相互结合使用。

通常你要找的东西看起来有点像这样:

mov DWORD PTR [edi+40], eax

(指令,寄存器,偏移量,大小和顺序可能不同,但间接通常是大多数代码崩溃的地方)

无论你做什么,你都应该认真考虑将来开启COD文件生成,因为这样可以非常容易地找到断层线。

答案 1 :(得分:0)

这取决于地图文件中的实际信息 - 如果它有行号信息(现在非常罕见),它将是显而易见的,你将能够做到这一点。否则你能做的最好的就是猜测。