cgdb---ubuntu14.04下安裝cgdb及gdb的使用

一. ubuntu 14.04 下安裝cgdb
1.ubuntun14.04下安裝cgdb
cong@msi:~$ sudo apt-get install cgdb
2. 使用: cgdb ./hello就可以了
a. cgdb分爲上面的vi窗口與下面的gdb窗口
  1. ESC-->切到vi窗口
  2. -->切到gdb窗口
  3. - -->減小vi窗口
  4. = -->增大vi窗口
  5.  shift - -->減小很多vi窗口
  6.  shift = -->增大很多vi窗口
b.斷點
空格添加/刪除斷點
c. gdbinit腳本不能用
  1. warning: File "/work/ffmpeg/jpeg/jpegc/.gdbinit" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
  2. 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".
  3. To completely disable this security protection add    set auto-load safe-path /    line to your configuration file "/home/cong/.gdbinit".
  4. For more information about this security protection see the  "Auto-loading safe path" section in the GDB manual. E.g., run from the shell:
  5.         info "(gdb)Auto-loading safe path"
臨時的方法: 在gdb的命令行裏面  source .gdbinit
永久的方法: cong@msi:~$ cat .gdbinit 
set auto-load safe-path /
二. gdb的使用
1. 斷點
a. 在指定文件中指定函數處設斷點
  1. <filename>: <func_name>
  2. <filename>: <line_num>   --> 例: break mm/slab.c:673
2. 打印
2.1 
{i,j,k,l}            -->打印多個變量
display {i,j,k,l}   --> 每執行一次都打印這幾個變量
undisplay           --> 去掉display

3.2 打印某個地址處的數據
  1. (gdb) help x
  2. Examine memory: x/FMT ADDRESS.
  3. ADDRESS is an expression for the memory address to examine.
  4. FMT is a repeat count followed by a format letter and a size letter-->顯示格式用兩部分表示
  5. Format letters are:                     -->格式類型 
  6.     o(octal), 
  7.     x(hex), 
  8.     d(decimal), 
  9.     u(unsigned decimal),
  10.     t(binary), 
  11.     f(float), 
  12.     a(address), 
  13.     i(instruction), 
  14.     c(char), 
  15.     s(string)
  16.     z(hex, zero padded on the left).
  17. Size letters are:                        -->長度類型 
  18.     b(byte), 
  19.     h(halfword), 
  20.     w(word), 
  21.     g(giant, 8 bytes).
  22. The specified number of objects of the specified size are printed
  23. 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彙編級調試
  1. (gdb) display /5i $pc                  -->pc是gdb的一個內部變量,打印當前的5條彙編指令
  2. 1: x/5i $pc
  3. => 0x1111dc <system_call>:    push %eax
  4.    0x1111dd <system_call+1>:    cld 
  5.    0x1111de <system_call+2>:    push %gs
  6.    0x1111e0 <system_call+4>:    push %fs
  7.    0x1111e2 <system_call+6>:    push %es
  8. (gdb) ni                              --> ni(nexti) 或si(stepi)進行彙編指令級調試
  9. 0x001111dd in system_call ()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章