GDB——GDB中一些调试中的小技巧

除了之前介绍的一些常用用法,GDB还有许多其他的功能,也是方便我们使用的。

这里写图片描述

技巧示例:断点处自动打印

(gdb) start
Temporary breakpoint 1 at 0x804846f: file tricks.c, line 33.
Starting program: /home/delphi/workspace/main.out 

Temporary breakpoint 1, main () at tricks.c:33
33      func();
(gdb) break tricks.c:18  < -------- 设置断点
Breakpoint 2 at 0x80483ef: file tricks.c, line 18.
(gdb) info break
Num     Type           Disp Enb Address    What
2       breakpoint     keep y   0x080483ef in func at tricks.c:18
(gdb) continue 
Continuing.

Breakpoint 2, func () at tricks.c:18
18          st[i].i = i;
(gdb) display /d i           < ------- 设置断点处自动打印
1: /d i = 0
(gdb) display /d i*i
2: /d i*i = 0
(gdb) display /a &i
3: /a &i = 0xbffff28c
(gdb) continue 
Continuing.

Breakpoint 2, func () at tricks.c:18
18          st[i].i = i;
3: /a &i = 0xbffff28c       <-- ---------- 自动打印
2: /d i*i = 1
1: /d i = 1
(gdb) continue 
Continuing.

Breakpoint 2, func () at tricks.c:18
18          st[i].i = i;
3: /a &i = 0xbffff28c
2: /d i*i = 4
1: /d i = 2
(gdb) continue 
Continuing.

Breakpoint 2, func () at tricks.c:18
18          st[i].i = i;
3: /a &i = 0xbffff28c
2: /d i*i = 9
1: /d i = 3
(gdb) continue 
Continuing.

Breakpoint 2, func () at tricks.c:18
18          st[i].i = i;
3: /a &i = 0xbffff28c
2: /d i*i = 16
1: /d i = 4
(gdb) continue 
Continuing.
st[0].i = 0
st[0].j = 0
st[1].i = 1
st[1].j = 1
st[2].i = 2
st[2].j = 4
st[3].i = 3
st[3].j = 9
st[4].i = 4
st[4].j = 16

Program exited normally.

技巧示例:符号查看

(gdb) whatis func
type = int ()
(gdb) ptype func
type = int ()
(gdb) whatis struct ST
type = struct ST
(gdb) ptype struct ST
type = struct ST {
    int i;
    int j;
}

技巧示例:GDB中的代码查看

(gdb) list tricks.c:18   < ------------ 查看指定文件行数及附近的代码
13      struct ST st[5] = {0};
14      int i = 0;
15      
16      for(i=0; i<5; i++)
17      {
18          st[i].i = i;          < ---------- 我们想要看到的代码
19          st[i].j = i * i;
20      }
21      
22      for(i=0; i<5; i++)
(gdb) set listsize 20      < -------------- 修改显示行数的数值
(gdb) show listsize
Number of source lines gdb will list by default is 20.
(gdb) list tricks.c:18
8       int j;
9   };
10  
11  int func()
12  {
13      struct ST st[5] = {0};
14      int i = 0;
15      
16      for(i=0; i<5; i++)
17      {
18          st[i].i = i;
19          st[i].j = i * i;
20      }
21      
22      for(i=0; i<5; i++)
23      {
24          printf("st[%d].i = %d\n", i, st[i].i);
25          printf("st[%d].j = %d\n", i, st[i].j);
26      }
27  }

猜你喜欢

转载自blog.csdn.net/small_prince_/article/details/80682155