用 GDB 查看调用堆栈,输出堆栈桢信息
#include <stdio.h>
#include <stdlib.h>
__attribute__((noinline)) void info(int x)
{
printf("info %d\n", x);
}
__attribute__((noinline)) int add(int x, int y)
{
int z = x + y;
info(z);
return z;
}
int main(int argc, char **argv)
{
int x = 0x100;
int y = 0x200;
int z = add(x, y);
printf("%d\n", z);
return 0;
}
上面这段代码分配了两个变量x
和y
,调用add
函数,函数内部调用info
函数用于输出结果。执行下面语句编译。
$ gcc -g -O0 -o test test.c #编译,去掉优化
使用 GDB 调试
$ gdb test
$ b main #符号名上加上断点,main函数加上断点
$ b add #add函数加上断点
$ b info #info函数加上断点
$ info breakpoints