📜  gdb 获取函数的返回值 - C++ (1)

📅  最后修改于: 2023-12-03 15:00:53.335000             🧑  作者: Mango

使用gdb获取函数的返回值 - C++

在调试C++程序时,有时需要获取函数的返回值。GDB是一款强大的调试工具,它可以帮助我们获取函数的返回值,下面介绍如何使用gdb获取函数的返回值。

开启符号调试

首先,我们需要开启符号调试,以便gdb可以找到函数的定义。我们可以在编译的时候加上-g选项,生成调试符号。

$ g++ -g -o test test.cpp
启动gdb

我们可以使用以下命令启动gdb调试程序:

$ gdb test
设置断点

我们需要在函数调用的地方设置断点,并执行程序。

(gdb) break test.cpp:6
Breakpoint 1 at 0x400607: file test.cpp, line 6.
(gdb) run
Starting program: /path/to/test 

Breakpoint 1, main () at test.cpp:6
6	    int result = add(1, 2);
进入函数

我们可以使用step命令进入函数内部。

(gdb) step
add (a=1, b=2) at test.cpp:12
12	    return a + b;
获取返回值

我们可以使用print命令获取函数的返回值。

(gdb) print $rax
$1 = 3

其中$rax是x86_64平台下函数返回值的寄存器,可以使用info registers命令查看所有寄存器的值。

(gdb) info registers
rax            0x3                 3
rbx            0x0                 0
rcx            0x7fffffffe3ec      140737488348844
rdx            0x7fffffffe3f0      140737488348848
rsi            0x7fffffffe3f0      140737488348848
rdi            0x1                 1
rbp            0x7fffffffe3e0      0x7fffffffe3e0
rsp            0x7fffffffe3e0      0x7fffffffe3e0
r8             0x0                 0
r9             0x7ffff7de6480      140737351907328
r10            0x7fffffffe080      140737488347840
r11            0x246               582
r12            0x4004d0            4195536
r13            0x7fffffffe4e0      140737488349120
r14            0x0                 0
r15            0x0                 0
rip            0x40061e            0x40061e <add(int, int)+27>
eflags         0x246               [ PF ZF IF ]
cs             0x33                51
ss             0x2b                43
ds             0x0                 0
es             0x0                 0
fs             0x0                 0
gs             0x0                 0
总结

通过以上步骤,我们可以使用gdb获取函数的返回值。在日常工作中,调试程序是不可避免的,熟练使用gdb是每个程序员必须具备的技能之一。