• GDB符号表概念及Linux获取符号表的方式


    GDB符号表概念

    GDB符号表是GDB调试器在调试过程中使用的一种数据结构,它包含了程序中函数、变量、类型等信息,方便在GDB在调试过程中进行符号解析和地址定位。

    GDB符号表主要由以下几部分组成:

    1. 函数符号表:包含了程序中定义的函数名称、参数、返回值等信息。
    2. 变量符号表:包含了程序中定义的变量名称、类型、作用域等信息。
    3. 类型符号表:包含了程序中定义的数据类型,例如结构体、枚举、类型别名等。
    4. 地址映射表:将程序中的虚拟地址映射到物理地址,方便GDB在调试过程中进行地址定位。

    GDB符号表是在编译时生成的,通常由编译器在生成目标文件时自动生成。在调试过程中,GDB会读取符号表,将程序中的地址解析为符号名称,以便在调试过程中进行源代码定位和变量查看。同时,GDB也可以根据符号表对程序进行反向映射,例如查看某个函数或变量的调用栈、内存占用情况等。

    需要注意的是,GDB符号表并不是在所有情况下都能够完全准确地反映程序的实际情况。例如,在某些优化情况下,编译器可能会对代码进行优化,导致GDB调试过程中无法准确定位某些符号。此外,如果程序使用了第三方库或插件,也可能导致GDB无法正确解析符号。因此,在调试过程中,如果发现GDB符号表不准确或不完整,需要检查编译器选项和程序以来关系,以确保调试的准确性。

    Linux获取符号表调试

    我们在利用GDB调试时通常需要符号表才可以方便地打断点、查看详细变量、位置信息。

    • 为了获取对可执行文件/动态库的符号表,我们在编译时必须加上-g参数生成对应的符号信息。

      gcc -g test.c -o test
      
      • 1

      这样在编译过程中将调试信息嵌入到生成的二进制文件中。

    • 获取程序的二进制文件和符号表文件:执行以下命令来获取程序的二进制文件和符号表文件:

      objcopy -O binary test test.bin
      addr2line -e test.bin -f -s -n 1>test.sym
      
      • 1
      • 2

      这将生成名为test.bin的二进制文件和名为test.sym的符号表文件。

    • 获取GDB符号表:使用GDB调试器打开二进制文件获取符号表。执行以下命令:

      gdb test.bin
      (gdb) list(address)
      
      • 1
      • 2

      将address替换成需要查看的函数或者变量的地址。GDB将显示该地址处的函数或变量的源代码和符号表信息。

  • 相关阅读:
    使用Spark探索数据
    sql语句数据库查询:如果当前元素已经使用过,下拉框不显示该元素该如何查询?
    洛谷千题详解 | P1015 [NOIP1999 普及组] 回文数【C++、Java、Python语言】
    C/C++ 进程间通信system V IPC对象超详细讲解(系统性学习day9)
    [附源码]SSM计算机毕业设计时事资讯平台JAVA
    Docker 和 Kubernetes:技术相同和不同之处
    极简工作流「GitHub 热点速览」
    【人工智能与机器学习】——线性回归、逻辑回归与分类评价指标(学习笔记)
    数字文创产权版权登记保护多少重要
    二叉树最近公共祖先
  • 原文地址:https://blog.csdn.net/weixin_52018852/article/details/134422947