您的位置:首页 > 其它

GDB的用法概要笔记

2006-05-03 15:27 447 查看
编译的时候需要加上-g参数,以打开调试信息。
例如:gcc -g -o hello hello.c
启动gdb进行调试:
shell#gdb hello
设置断点:break或简单打b后面加行号或函数名
(gdb)b function_name
(gdb)b line_number
招待程序:打入r或run后,程序就开始运行直到遇到断点停止。
(gdb)run
如果需要为程序指定命令行参数的话,参数可以跟在run后面,如:
(gdb)run 123
同样也可以使用set args来指定参数。
gdb提供两种方式:
1.单步进入,step into即跟踪到函数内。命令是step或s
2.单步,next,就是简单的单步,不会进入函数。命令是next或n
(其实如果有使用过ture C的朋友肯定对单步进入和单步这两种调试方式不陌生的。)
我们可以用l/list命令来显示源代码。
(gdb)list
不带参数,将显示当前位置之后的,或者是上一个list命令之后的十行代码。
如果带参数(-),即list -,则表示列表当前位置之前,或者上一个list命令之前的十行代码。
list命令可带的参数有:
LINENUM, 表示列出以linenum行为中心的前后共十行代码。
FILE:LINENUM, 表示列出文件FILE中以linenum为中心的前后共十行代码。
FUNCTION, 表示列出以函数FUNCTION开头为中心的前后共十行代码。
FILE:FUNCTION, 类似于FILE.LINENUM。
*ADDRESS, 列出ADDRESS地址所包括的行的前后共十行代码。
(gdb)list main //列出main函数的前后十行代码
8 {
9 printf(/"receive signal %d//n/", signum);
10 sleep(5);
11 }
12 int main(int argc,char**argv)
13 {
14 struct sigaction act;
15 int sig,i;
16
17 sigemptyset(&act.sa_mask);
(gdb)list - //之前的十行代码
1 #include <signal.h>
2 #include <sys/types.h>
3 #include <unistd.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6
7 void new_op(int signum,siginfo_t *info,void *myact)
(gdb)list //之后的十行代码
8 {
9 printf(/"receive signal %d//n/", signum);
10 sleep(5);
11 }
12 int main(int argc,char**argv)
13 {
14 struct sigaction act;
15 int sig,i;
16
17 sigemptyset(&act.sa_mask);
设置断点,并且代码运行以后,我们可以用continue(c)/ctrl+c继续或者中止当前运行。
bt或backtrace命令可以显示栈中的内容。如下:
(gdb)bt
#0 0xb7e9029b in nanosleep () from /lib/tls/libc.so.6
#1 0xb7e900c4 in sleep () from /lib/tls/libc.so.6
#2 0x0804853c in main (argc=1, argv=0xbff50234) at test.c:32
检查表达式的值的命令是p或print格式是p <表达式>.(类似于Ture C的watch吧)。
通过上面的源代码,我们知道act是一个sigaction的结构。
(gdb) p act
$29 = {__sigaction_handler = {sa_handler = 0x80484b0 <new_op>, sa_sigaction = 0x80484b0 <new_op>},
sa_mask = {__val = {0 <repeats 32 times>}}, sa_flags = 4, sa_restorer = 0}
(gdb) p act.sa_mask
$30 = {__val = {0 <repeats 32 times>}}
gdb的退出(quit/q):
(gdb)q
其他:
1、gdb并不一定要求启动时连同待调试的程序一起启动,可以先启动gdb然后通过file命令指定待调试的程序。gdb还支持加入core文件进行调试。gdb --silent表示不显示gdb启动的提示信息。
2、gdb的命令很多,你可以使用M-?查看一下gdb的命令列表。(M-?表示同时按下ESC+SHIFT+?)
3、查看命令的帮助:help 命令。如(gdb)help bt
4、对于gdb更详细的内容可参考原发于中科大BBS上的一篇GDB使用手册(http://www.erya.cn/online/gdb)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: