一. ubuntu 14.04 下安装cgdb
1.ubuntun14.04下安装cgdb
cong@msi:~$ sudo apt-get install cgdb
2. 使用: cgdb ./hello就可以了
a. cgdb分为上面的vi窗口与下面的gdb窗口
-
ESC-->切到vi窗口
-
i -->切到gdb窗口
-
- -->减小vi窗口
-
= -->增大vi窗口
-
shift - -->减小很多vi窗口
-
shift = -->增大很多vi窗口
b.断点
空格添加/删除断点
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"
临时的方法: 在gdb的命令行里面 source .gdbinit
永久的方法: 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. 打印
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.
例如要按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汇编级调试
-
(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 ()
1. ddd一启动就显示忙,关闭ddd时提示 GDB ddd is still busy
rm -rf ~/.ddd
阅读(3065) | 评论(0) | 转发(0) |