1.ubuntun14.04下安装cgdb
cong@msi:~$ sudo apt-get install cgdb
2. 使用:cgdb ./hello就可以了
a. cgdb分为上面的vi窗口与下面的gdb窗口
b.断点
空格添加/删除断点
c. gdbinit脚本不能用
warning:File"/work/ffmpeg/jpeg/jpegc/.gdbinit"auto-loading has been declined by your `auto-load safe-path'setto"$debugdir:$datadir/auto-load".
Toenable execution of this file addadd-autoloadsafepath/workffmpegjpegjpegc/.gdbinitlinetoyour configuration file"/home/cong/.gdbinit"Tocompletely disable this security protection add setload safe/ lineFormore information about this security protection see the "Auto-loading safe path"sectioninthe GDB manual.E.g.,run from the shell:
info"(gdb)Auto-loading safe path"
临时的方法:在gdb的命令行里面 source .gdbinit
永久的方法:cong@msi:~$ cat .gdbinit
set auto-load safe-path /
二. gdb的使用
1. 断点
a. 在指定文件中指定函数处设断点
2.1
p {i,j,k,l} -->打印多个变量
display {i,l} --> 每执行一次都打印这几个变量
undisplay --> 去掉display
3.2 打印某个地址处的数据
(gdb) x /20xh inode->i_zone
0x2cb92 : 0xbbc7 0xbbc8 0xbbc9 0xbbca 0xbbcb 0xbbcc 0xbbcd 0xbbce
0x2cba2 : 0x0000 0x0000 0x0000 0x0000 0x0000 0x0b6b 0x9bdc 0x0000
0x2cbb2 : 0x0000 0x0301 0x0931 0x0001
2.3 gdb汇编级调试
a. cgdb分为上面的vi窗口与下面的gdb窗口
- ESC->切到vi窗口
- i>切到gdb窗口
- >减小vi窗口
- =>增大vi窗口
- shift>减小很多vi窗口
- shift>增大很多vi窗口
空格添加/删除断点
c. gdbinit脚本不能用
永久的方法:cong@msi:~$ cat .gdbinit
set auto-load safe-path /
二. gdb的使用
1. 断点
a. 在指定文件中指定函数处设断点
b<filename>:<func_name>
b<line_num> --> 例:break mm/slab.c:673
2. 打印
2.1
p {i,j,k,l} -->打印多个变量
display {i,l} --> 每执行一次都打印这几个变量
undisplay --> 去掉display
3.2 打印某个地址处的数据
(gdb)help x
Examine memory:x/FMT ADDRESS.
ADDRESSisan expressionforthe memory addresstoexamine.
FMTisa repeat count followed by a format letteranda size letter.-->显示格式用两部分表示
Format letters are: -->格式类型
o(octal),
x(hex
d(decimal
u(unsigned decimal
t(binary
f(float
a(address
i(instruction
c(char
sstring)
zontheleft.
Size letters are: -->长度类型
b(byte
h(halfword
w(word
g(giant.
The specified number of objects of the specified size are printed
accordingtothe format.
例如要按16进制显示类型为short的inode->i_zone
(gdb) x /20xh inode->i_zone
0x2cb92 : 0xbbc7 0xbbc8 0xbbc9 0xbbca 0xbbcb 0xbbcc 0xbbcd 0xbbce
0x2cba2 : 0x0000 0x0000 0x0000 0x0000 0x0000 0x0b6b 0x9bdc 0x0000
0x2cbb2 : 0x0000 0x0301 0x0931 0x0001
2.3 gdb汇编级调试
)display/5i $pc -->pc是gdb的一个内部变量,打印当前的5条汇编指令
1/5i $pc
>0x1111dc<system_call:push%eax
0x1111dd+1:cld
0x1111de+2%gs
0x1111e0+4%fs
0x1111e2+6%es
)ni --> ni(nexti) 或si(stepi)进行汇编指令级调试
0x001111ddinsystem_call()