一. 退出正在调试的函数
当单步调试一个函数时,如果不想继续跟踪下去了,可以有两种方式退出。这两种方式所达到的效果不同。下面说明 gdb 调试中,这两种退出函数的不同。
下面以下面代码为例,代码如下:
#include <stdio.h>
int fun(void)
{
int a = 0;
a += 1;
a += 2;
return a;
}
int main(void)
{
int data = 0;
data = fun();
printf("*****data: %d\n", data);
return 0;
}
1. finish 命令
finish 命令的退出是,会执行完当前调用函数的结尾,然后返回,然后等待输入接下来的命令。
finish 命令退出操作效果如下所示:
可以看到,当想退出 fun() 函数的调用时,输入 finish 命令后,gdb 调试在执行完fun () 函数后返回。打印值是 3。
2. return 命令
return 命令的退出,函数不会继续执行剩下的语句,并直接返回。也可以用 return expression 命令指定函数的返回值。return 命令退出操作效果如下所示:
可以看到,return 命令退出了函数并且修改了函数的返回值。
二. 通过命令直接运行函数
使用 gdb 调试程序时,可以使用 call 或 print 命令直接调用函数执行。使用如下代码操作说明:
#include <stdio.h>
int gdata = 0;
int fun(void)
{
return (++gdata);
}
int main(void)
{
printf("***gdata: %d\n", gdata);
return 0;
}
可以看到,执行了两次 fun() 函数后,gdata 的值变成 2。