乐闻世界logo
搜索文章和话题

要求GDB列出程序中的所有函数

5 个月前提问
4 个月前修改
浏览次数58

1个答案

1

在使用GDB(GNU Debugger)进行调试时,如果您想要列出程序中的所有函数,可以使用几种不同的方法。首先确保您已经加载了程序的调试信息。

方法1: 使用 info functions

最直接的方法是在GDB命令行中使用 info functions命令。这条命令会列出程序中所有可用的函数名称,包括静态和非静态函数。例如:

bash
(gdb) info functions

这将显示类似以下内容的输出:

shell
All defined functions: File main.c: void print_hello(); int main(); File utils.c: int add(int, int); int subtract(int, int);

这个例子表明,main.c 文件中定义了 print_hello()main() 函数,而 utils.c 文件中定义了 add()subtract() 函数。

方法2: 使用 nm 工具

虽然不是直接在GDB中执行的,但您也可以在Linux系统中使用 nm 命令来列出程序中的所有符号,包括函数。这对于没有调试信息的二进制文件也非常有用。例如:

bash
nm -C your_program

这里,-C 选项告诉 nm 解析符号的实际名称,这有助于您更容易识别每个函数。输出将包括每个符号的地址、类型(例如,"T" 代表一个在文本(代码)区定义的符号)和符号名。

方法3: 使用 objdump

类似于 nmobjdump 命令也可以被用来查看包含在编译好的程序中的函数信息。使用如下命令:

bash
objdump -t your_program | grep ' F '

这条命令过滤出所有的函数(标记为 'F' 的条目)。它提供的信息类似于 nm

结论

通常,info functions 在GDB中是最直接的方法来查看所有定义的函数,因为它完全集成在调试环境中。但是,如果您在查看没有调试信息的二进制文件或者需要在GDB外部分析符号,nmobjdump 是非常有用的工具。

2024年6月29日 12:07 回复

你的答案