一. ubuntu 14.04 下安装cgdb
1.ubuntun14.04下安装cgdb
cong@msi:~$ sudo apt-get install cgdb
1.ubuntun14.04下安装cgdb
cong@msi:~$ sudo apt-get install cgdb
2. 使用: cgdb ./hello就可以了
a. cgdb分为上面的vi窗口与下面的gdb窗口
b.断点
空格添加/删除断点
c. gdbinit脚本不能用
临时的方法: 在gdb的命令行里面 source .gdbinit
永久的方法: cong@msi:~$ cat .gdbinit
set auto-load safe-path /
二. gdb的使用
1. 断点
a. 在指定文件中指定函数处设断点
2. 打印
2.1
p {i,j,k,l} -->打印多个变量
display {i,j,k,l} --> 每执行一次都打印这几个变量
undisplay --> 去掉display
3.2 打印某个地址处的数据
例如要按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
注: 要用display自动显示--> display /40wx 0xc0101f80
2.3 gdb汇编级调试
a. cgdb分为上面的vi窗口与下面的gdb窗口
- ESC-->切到vi窗口
- i -->切到gdb窗口
- - -->减小vi窗口
- = -->增大vi窗口
- shift - -->减小很多vi窗口
- shift = -->增大很多vi窗口
空格添加/删除断点
c. gdbinit脚本不能用
- warning: File "/work/ffmpeg/jpeg/jpegc/.gdbinit" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
- To enable execution of this file add add-auto-load-safe-path /work/ffmpeg/jpeg/jpegc/.gdbinit line to your configuration file "/home/cong/.gdbinit".
- To completely disable this security protection add set auto-load safe-path / line to your configuration file "/home/cong/.gdbinit".
- For more information about this security protection see the "Auto-loading safe path" section in the GDB manual. E.g., run from the shell:
- info "(gdb)Auto-loading safe path"
永久的方法: cong@msi:~$ cat .gdbinit
set auto-load safe-path /
二. gdb的使用
1. 断点
a. 在指定文件中指定函数处设断点
- b <filename>: <func_name>
- b <filename>: <line_num> --> 例: break mm/slab.c:673
2.1
p {i,j,k,l} -->打印多个变量
display {i,j,k,l} --> 每执行一次都打印这几个变量
undisplay --> 去掉display
3.2 打印某个地址处的数据
- (gdb) help x
- Examine memory: x/FMT ADDRESS.
- ADDRESS is an expression for the memory address to examine.
- FMT is a repeat count followed by a format letter and a size letter. -->显示格式用两部分表示
- Format letters are: -->格式类型
- o(octal),
- x(hex),
- d(decimal),
- u(unsigned decimal),
- t(binary),
- f(float),
- a(address),
- i(instruction),
- c(char),
- s(string)
- z(hex, zero padded on the left).
- Size letters are: -->长度类型
- b(byte),
- h(halfword),
- w(word),
- g(giant, 8 bytes).
- The specified number of objects of the specified size are printed
- according to the format.
(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
注: 要用display自动显示--> display /40wx 0xc0101f80
- (gdb) display /5i $pc -->pc是gdb的一个内部变量,打印当前的5条汇编指令
- 1: x/5i $pc
- => 0x1111dc <system_call>: push %eax
- 0x1111dd <system_call+1>: cld
- 0x1111de <system_call+2>: push %gs
- 0x1111e0 <system_call+4>: push %fs
- 0x1111e2 <system_call+6>: push %es
- (gdb) ni --> ni(nexti) 或si(stepi)进行汇编指令级调试
- 0x001111dd in system_call ()