GDB(GNU Debugger)是一个强大的调试工具,广泛用于Linux环境下的程序调试。它允许开发者查看程序的运行状态,包括变量值、内存布局以及函数调用堆栈等。
堆栈(Stack) 是程序运行时用于存储局部变量和函数调用信息的数据结构。每当一个函数被调用时,一个新的栈帧(Stack Frame)就会被压入堆栈,其中包含了该函数的参数、局部变量以及返回地址等信息。
gdb your_program
run
或者设置断点后运行:
break main
run
backtrace
或者简写为:
bt
这条命令会显示当前函数调用堆栈的所有帧,包括每个帧的函数名、参数以及源代码行号等信息。
问题:在查看堆栈时,发现信息不完整或者模糊不清。
原因:
-g
选项)。解决方法:
-g
选项,例如:gcc -g -o your_program your_program.c
假设有一个简单的C程序example.c
:
#include <stdio.h>
void foo() {
int a = 10;
printf("%d\n", a);
}
int main() {
foo();
return 0;
}
编译并调试这个程序:
gcc -g -o example example.c
gdb example
(gdb) run
(gdb) bt
执行bt
命令后,GDB将显示类似如下的堆栈信息:
#0 foo () at example.c:5
#1 0x0000000000400576 in main () at example.c:10
这表明main
函数调用了foo
函数,并且当前执行到了foo
函数的第五行。
领取专属 10元无门槛券
手把手带您无忧上云