GDB执行info functions为何显示大量不属于当前二进制的多余函数
问题原因
- 程序默认采用动态链接方式编译,运行时依赖系统标准C库(glibc),编译时加的
-ggdb参数会保留所有关联二进制文件的调试符号。GDB执行info functions时默认会遍历所有已加载的符号表,包含C库内置的大量系统函数,因此会输出大量非自定义的函数信息。
解决方法
方法1:按源文件过滤(最常用)
直接在info functions后指定你的代码源文件名作为过滤条件,即可仅输出该文件中定义的自定义函数:
info functions calculator.c:
如果需要更灵活的匹配,也可以追加正则规则,比如匹配所有非下划线开头的函数:
info functions ^[^_]
方法2:关闭共享库符号自动加载
在启动程序前执行以下GDB命令,禁止自动加载共享库的调试符号,之后再查询函数就只会显示自有代码的函数:
set auto-solib-add off
该方案的弊端是后续调试标准库函数时不会显示对应符号信息,适合只需要调试自有代码的场景。
方法3:静态编译(可选)
如果不希望依赖动态库,编译时加上-static参数生成静态链接的二进制文件,此时程序不会关联动态C库,默认查询也不会出现系统库函数:
gcc -ggdb -static calculator.c -o calculator
该方案会让生成的二进制文件体积大幅增大,按需选择即可。
内容的提问来源于stack exchange,提问作者iamnoobv_1
相关产品推荐
相关产品推荐

