【问题标题】:Where symbol table gets stored?符号表存储在哪里?
【发布时间】:2018-09-20 05:06:48
【问题描述】:

我正在研究编译器,我突然很好奇,如果我用 -g 选项编译一个程序(比如说 test.c),是否会创建一个带有符号表的实际文件并将其存储在某个地方,或者它只是得到结合可执行文件?

我是全新的,所以我真的在学习基础知识,对你们中的一些人来说可能听起来很愚蠢。对不起,但请告诉我!

谢谢!

【问题讨论】:

    标签: compiler-construction gdb symbol-table


    【解决方案1】:

    ELF 对象文件格式(这是 gcc 在许多常见平台上生成的)是一种容器格式,可以包含许多不同类型的信息。它始终包含外部链接符号的符号表(从库中定义或需要)。此外,如果指定了-g,ELF 文件将包含大量仅供调试器使用的信息,包括所有使用的本地符号。

    您可以使用objdump --debuggingreadelf --debug-dump 以某种易于阅读的格式查看调试信息。祝你好运!

    调试信息中通常不包含的一件事是实际的源代码。您会发现源文件的名称和对应于不同编译代码块的行号。调试器读取源代码文件以报告源代码行;如果在编译可执行文件后对源代码文件进行了编辑,这将无法按预期工作。

    【讨论】:

    • 这很有帮助!非常感谢!
    • 这个答案可以改进:符号表!=调试信息,可执行文件中可能有 0、1 或 2 个单独的符号表。
    • @employee:是的,我本可以写一本关于该主题的书,但我选择简要概述一下 OP 可以使用哪些工具来改进他们的学习过程。因为这样他们会学到更多。但我不认为我的回答具有误导性;它暗示了你的大部分观点。
    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多