我们什么时候需要使用gcc / g ++来生成Map文件? “-g”足以进行调试吗?

时间:2016-09-22 10:40:06

标签: linux debugging dictionary gcc gdb

如果我们想使用gdb来调试版本可执行文件,我们确保使用-g进行编译,然后使用objcopy修剪调试信息。通过源文件时,此调试信息可用于查找源文件行。

但是当/为什么我们还需要生成Map文件时,gdb的任何要求或能力都依赖于Map文件?

感谢。

1 个答案:

答案 0 :(得分:1)

  

但是当/为什么我们还需要生成Map文件时,gdb的任何要求或能力都依赖于Map文件?

假设您正在讨论链接器-M--print-map的同义词)和-Map选项,这些是纯粹的调试工具,旨在告诉您什么代码/ data被拉入你的二进制文件(以及为什么)。

GDB不需要或使用此输出(并且输出不易解析,即仅供人类使用)。

<强>更新

  

我们何时以及如何使用此地图文件?

正如我之前所说,该文件回答了以下问题:

  • 哪个对象或库执行了给定的功能?
  • .text.data部分消耗了多少空间?
  • 为什么这个特定的目标文件被从存档库中选择到链接中(即哪个未解析的符号导致该目标文件被链接)?

如果您有上述问题之一,请使用地图文件。如果您没有这样的问题,那么您就不需要地图文件了。

至于&#34;如何&#34; - 只需用您喜欢的编辑器或寻呼机阅读它。如果您有关于如何解释特定行的特定问题,则执行询问单独的特定问题。