原创 常用的gdb 命令

2010-11-9 16:53 5885 4 4 分类: MCU/ 嵌入式
     
命令                        解释
break NUM               在指定的行上设置断点。
bt                      显示所有的调用栈帧。该命令可用来显示函数的调用顺序。
clear                   删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。
continue                继续执行正在调试的程序。该命令用在程序由于处理信号或断点而
                        导致停止运行时。
display EXPR            每次程序停止后显示表达式的值。表达式由程序定义的变量组成。
file FILE               装载指定的可执行文件进行调试。
help NAME               显示指定命令的帮助信息。
info break              显示当前断点清单,包括到达断点处的次数等。
info files              显示被调试文件的详细信息。
info func               显示所有的函数名称。
info local              显示当函数中的局部变量信息。
info prog               显示被调试程序的执行状态。
info var                显示所有的全局和静态变量名称。
kill                    终止正被调试的程序。
list                    显示源代码段。
make                    在不退出 gdb 的情况下运行 make 工具。
next                    在不单步执行进入其他函数的情况下,向前执行一行源代码。
print EXPR              显示表达式 EXPR 的值。



-----------------
清单 一个有错误的 C 源程序 bugging.c
-----------------
#include
#include


static char buff [256];
static char* string;
int main ()
{


    printf ("Please input a string: ");
    gets (string);


    printf (" Your string is: %s ", string);
}
-----------------
上面这个程序非常简单,其目的是接受用户的输入,然后将用户的输入打印出来。该程序使用了一个未经过初
始化的字符串地址 string,因此,编译并运行之后,将出现 Segment Fault 错误:
$ gcc -o test -g test.c
$ ./test
Please input a string: asfd
Segmentation fault (core dumped)
为了查找该程序中出现的问题,我们利用 gdb,并按如下的步骤进行:
1.运行 gdb bugging 命令,装入 bugging 可执行文件;
2.执行装入的 bugging 命令;
3.使用 where 命令查看程序出错的地方;
4.利用 list 命令查看调用 gets 函数附近的代码;
5.唯一能够导致 gets 函数出错的因素就是变量 string。用 print 命令查看 string 的值;
6.在 gdb 中,我们可以直接修改变量的值,只要将 string 取一个合法的指针值就可以了,为此,我们在第
11 行处设置断点;
7.程序重新运行到第 11 行处停止,这时,我们可以用 set variable 命令修改 string 的取值;
8.然后继续运行,将看到正确的程序运行结果。

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /2 下一条