基本使用不会贴在这里。只是放自己的使用心得。
基本使用可以看这个
http://fanqiang.chinaunix.net/program/other/2006-07-14/4834.shtml
1.为什么没有调试信息?
多模块的时候,我明明debug编译了,相应的.so文件也拷贝到安装目录中了,加断点的时候,找不到文件提示:No source file namedXXXXX。
原来要运行的时候才加载对应的文件。
比如说你要给一个对话框创建的时候的代码加断点。先把这个对话框运行起来,然后加断点就可以了。
网上搜了下,说可以在.gdbinit里加
"set breakpoint pending on"
解决。我没试过。
2.调用堆栈
命令:bt //列出调用堆栈
命令:frame id //栈顶ID号为0,往后依次类推。
用frame命令不会让程序的执行跳转到对应位置,但是你可以查看变量及各种状态。程序的下一条指令不会随frame而边。它会给你造成程序好像从后面重新执行的错觉。
3.打印内存。
X命令。可以用help x来查看。
x/<n/f/u> <addr>
n、f、u是可选的参数。
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
u表示单位的大小:如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。
例子:
假设t是int型变量
4.打印数组
例如,你的程序中有这样的语句:
int *array = (int *) malloc (len * sizeof (int));
于是,在GDB调试过程中,你可以以如下命令显示出这个动态数组的取值:
p *array@len
5.core dump
http://my.oschina.net/kaixindewo/blog/28526
http://www.cnblogs.com/lbsx/archive/2010/10/09/1846535.html
http://cs.baylor.edu/~donahoo/tools/gdb/tutorial.html
http://www.linuxsir.org/bbs/thread344797.html
基本使用可以看这个
http://fanqiang.chinaunix.net/program/other/2006-07-14/4834.shtml
1.为什么没有调试信息?
多模块的时候,我明明debug编译了,相应的.so文件也拷贝到安装目录中了,加断点的时候,找不到文件提示:No source file namedXXXXX。
原来要运行的时候才加载对应的文件。
比如说你要给一个对话框创建的时候的代码加断点。先把这个对话框运行起来,然后加断点就可以了。
网上搜了下,说可以在.gdbinit里加
"set breakpoint pending on"
解决。我没试过。
2.调用堆栈
命令:bt //列出调用堆栈
命令:frame id //栈顶ID号为0,往后依次类推。
用frame命令不会让程序的执行跳转到对应位置,但是你可以查看变量及各种状态。程序的下一条指令不会随frame而边。它会给你造成程序好像从后面重新执行的错觉。
3.打印内存。
X命令。可以用help x来查看。
x/<n/f/u> <addr>
n、f、u是可选的参数。
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
u表示单位的大小:如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。
例子:
假设t是int型变量
(gdb) x/t &t
0xbffff3ac: 00000000001010000011111111111101
(gdb) x/4bt &t
0xbffff3ac: 11111101 00111111 00101000 00000000
4.打印数组
例如,你的程序中有这样的语句:
int *array = (int *) malloc (len * sizeof (int));
于是,在GDB调试过程中,你可以以如下命令显示出这个动态数组的取值:
p *array@len
5.core dump
http://my.oschina.net/kaixindewo/blog/28526
http://www.cnblogs.com/lbsx/archive/2010/10/09/1846535.html
http://cs.baylor.edu/~donahoo/tools/gdb/tutorial.html
http://www.linuxsir.org/bbs/thread344797.html