tom@ubuntu:~/dvp$ cat -n main.c
1 const char* acWordsList[] = {"hello", "world", "good", "BeiJing"};
2
3 static int s = 0;
4
5 typedef struct
6 {
7 int iW;
8 int iH;
9 int iX;
10 int iY;
11 }BOX_ST;
12
13 BOX_ST stBox;
14
15 int sum(const int a, const int b)
16 {
17 int c = a + b;
18
19 return c;
20 }
21
22 int main()
23 {
24 for (int i = 0; i < 18; ++i)
25 {
26 stBox.iW = i;
27 stBox.iH = i;
28 stBox.iX = i;
29 stBox.iY = i;
30
31 s = sum(i,i+2);
32 }
33
34 return 0;
35 }
tom@ubuntu:~/dvp$
(gdb) help list
List specified function or line.
With no argument, lists ten more lines after or around previous listing.
"list -" lists the ten lines before a previous ten-line listing.
One argument specifies a line, and ten lines are listed around that line.
Two arguments with comma between specify starting and ending lines to list.
Lines can be specified in these ways:
LINENUM, to list around that line in current file,
FILE:LINENUM, to list around that line in that file,
FUNCTION, to list around beginning of that function,
FILE:FUNCTION, to distinguish among like-named static functions.
*ADDRESS, to list around the line containing that address.
With two args, if one is empty, it stands for ten lines away from
the other arg.
By default, when a single location is given, display ten lines.
This can be changed using "set listsize", and the current value
can be shown using "show listsize".
(gdb)
(gdb) show listsize
Number of source lines gdb will list by default is 10.
(gdb)
(gdb) set listsize 20
(gdb) show listsize
Number of source lines gdb will list by default is 20.
(gdb) set listsize 10
(gdb) show listsize
Number of source lines gdb will list by default is 10.
(gdb)
(gdb) list 10
5 typedef struct
6 {
7 int iW;
8 int iH;
9 int iX;
10 int iY;
11 }BOX_ST;
12
13 BOX_ST stBox;
14
(gdb)
(gdb) list main.c:10
5 typedef struct
6 {
7 int iW;
8 int iH;
9 int iX;
10 int iY;
11 }BOX_ST;
12
13 BOX_ST stBox;
14
(gdb)
(gdb) list main
18
19 return c;
20 }
21
22 int main()
23 {
24 for (int i = 0; i < 18; ++i)
25 {
26 stBox.iW = i;
27 stBox.iH = i;
(gdb) list sum
11 }BOX_ST;
12
13 BOX_ST stBox;
14
15 int sum(const int a, const int b)
16 {
17 int c = a + b;
18
19 return c;
20 }
(gdb)
(gdb) list main.c:main
18
19 return c;
20 }
21
22 int main()
23 {
24 for (int i = 0; i < 18; ++i)
25 {
26 stBox.iW = i;
27 stBox.iH = i;
(gdb) list main.c:sum
11 }BOX_ST;
12
13 BOX_ST stBox;
14
15 int sum(const int a, const int b)
16 {
17 int c = a + b;
18
19 return c;
20 }
(gdb)
(gdb) disassemble sum
Dump of assembler code for function sum:
0x00000000004004d6 <+0>: push %rbp
0x00000000004004d7 <+1>: mov %rsp,%rbp
0x00000000004004da <+4>: mov %edi,-0x14(%rbp)
0x00000000004004dd <+7>: mov %esi,-0x18(%rbp)
0x00000000004004e0 <+10>: mov -0x14(%rbp),%edx
0x00000000004004e3 <+13>: mov -0x18(%rbp),%eax
0x00000000004004e6 <+16>: add %edx,%eax
0x00000000004004e8 <+18>: mov %eax,-0x4(%rbp)
0x00000000004004eb <+21>: mov -0x4(%rbp),%eax
0x00000000004004ee <+24>: pop %rbp
0x00000000004004ef <+25>: retq
End of assembler dump.
(gdb) list *0x4004d6
0x4004d6 is in sum (main.c:16).
11 }BOX_ST;
12
13 BOX_ST stBox;
14
15 int sum(const int a, const int b)
16 {
17 int c = a + b;
18
19 return c;
20 }
(gdb)
功能:显示对象object附近的代码
(gdb) list stBox
8 {
9 int iW;
10 int iH;
11 int iX;
12 int iY;
13 }BOX_ST;
14
15 BOX_ST stBox;
16
17 int sum(const int a, const int b)
(gdb)
功能:显示自定义数据结构类型的代码
(gdb) list BOX_ST
8 {
9 int iW;
10 int iH;
11 int iX;
12 int iY;
13 }BOX_ST;
14
15 BOX_ST stBox;
16
17 int sum(const int a, const int b)
(gdb)
功能:显示指定全局变量声明行附近的代码
(gdb) list s
1 #include
2
3 const char* acWordsList[] = {"hello", "world", "good", "BeiJing"};
4
5 static int s = 0;
6
7 typedef struct
8 {
9 int iW;
10 int iH;
(gdb)
(gdb) list sum
13 }BOX_ST;
14
15 BOX_ST stBox;
16
17 int sum(const int a, const int b)
18 {
19 int c = a + b;
20
21 return c;
22 }
(gdb) list
23
24 int main()
25 {
26 for (int i = 0; i < 18; ++i)
27 {
28 stBox.iW = i;
29 stBox.iH = i;
30 stBox.iX = i;
31 stBox.iY = i;
32
(gdb) list
33 s = sum(i,i+2);
34
35 printf("%d + %d = %d\n", i, i + 2, s);
36 }
37
38 return 0;
39 }
(gdb)
功能:显示当前行前面的代码块
(gdb) list
33 s = sum(i,i+2);
34
35 printf("%d + %d = %d\n", i, i + 2, s);
36 }
37
38 return 0;
39 }
(gdb) list -
23
24 int main()
25 {
26 for (int i = 0; i < 18; ++i)
27 {
28 stBox.iW = i;
29 stBox.iH = i;
30 stBox.iX = i;
31 stBox.iY = i;
32
(gdb) list -
13 }BOX_ST;
14
15 BOX_ST stBox;
16
17 int sum(const int a, const int b)
18 {
19 int c = a + b;
20
21 return c;
22 }
(gdb)
忘记怎么使用list命令时,有一妙计便可解决此困扰,那就是(gdb)help list
《完》