技术交流QQ群:1027579432,欢迎你的加入!

1.gdb调试

  • gcc a.c b.c c.c -o app:无法进行gbd调试
  • gcc a.c b.c c.c -o app -g:可以进行gdb调试
    • -g:会保留函数名和变量名

2.启动gdb

  • 启动方法:gdb 可执行程序的名字,例如gbd app
  • 给程序传参:set args xxx xxx,如下例所示:
    cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB/args$ cat test.c
    /************************************************************************> File Name: test.c> Author: CurryCoder> Mail: 1217096231@qq.com > Created Time: 2020年05月23日 星期六 10时55分00秒
    ************************************************************************/#include<stdio.h>int main(int argc, const char* argv[]){printf("args num = %d\n", argc);for(int i = 0; i < argc; i++){printf("arg%d: %s\n", i, argv[i]);}return 0;
    }
    cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB/args$ gcc test.c
    cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB/args$
    cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB/args$ ls
    a.out  test.c
    cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB/args$ ./a.out
    args num = 1
    arg0: ./a.out
    cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB/args$ ./a.out abc def gh 000 666
    args num = 6
    arg0: ./a.out
    arg1: abc
    arg2: def
    arg3: gh
    arg4: 000
    arg5: 666/********************************************使用gbd开始进行调试*********************************/cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB/args$ gcc test.c -g -o app
    cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB/args$ gdb app
    GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
    Copyright (C) 2016 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from app...done.
    (gdb) set args hello world 666
    (gdb) r
    Starting program: /home/cdl/Cpp_Tutorials/GDB/args/app hello world 666
    args num = 4
    arg0: /home/cdl/Cpp_Tutorials/GDB/args/app
    arg1: hello
    arg2: world
    arg3: 666
    [Inferior 1 (process 30054) exited normally]
    (gdb) Quit
    

3.查看代码:list

- 当前文件:- l- l 行号- l 函数名
- 非当前文件:- l 文件名:行号- l 文件名:函数名
- 设置显示的行数:- set listsize n- show listsize
```
cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB$ ls
app  args  insert_sort.c  main.c  makefile  mysort  select_sort.c  sort  sort.h
cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB$
cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB$
cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB$ gdb app
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from app...done.
(gdb) l
1   #include <stdio.h>
2   #include "sort.h"
3
4   void main()
5   {
6       int i;
7       //������������
8       int array[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
9       int array2[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
10
(gdb) show listsize 5
Number of source lines gdb will list by default is 10.
(gdb) l
11      //�������鳤��
12      int len = sizeof(array) / sizeof(int);
13      //��������
14      printf("Sort Array:\n");
15      for (i = 0; i < len; ++i)
16      {
17          printf("%d\t", array[i]);
18      }
19      printf("\n");
20
(gdb) set listsize 5
(gdb) l 5
3
4   void main()
5   {
6       int i;
7       //������������
(gdb) Quit
cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB$
cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB$
cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB$ gdb app
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from app...done.
(gdb) l
1   #include <stdio.h>
2   #include "sort.h"
3
4   void main()
5   {
6       int i;
7       //������������
8       int array[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
9       int array2[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
10
(gdb) show listsize
Number of source lines gdb will list by default is 10.
(gdb) set listsize 20
(gdb) l
11      //�������鳤��
12      int len = sizeof(array) / sizeof(int);
13      //��������
14      printf("Sort Array:\n");
15      for (i = 0; i < len; ++i)
16      {
17          printf("%d\t", array[i]);
18      }
19      printf("\n");
20
21      // selectionSort
22      selectionSort(array, len);
23      // printf
24      printf("Selection Sort:\n");
25      for (i = 0; i < len; ++i)
26      {
27          printf("%d  ", array[i]);
28      }
29
30      // insertionSort
(gdb) l 5
1   #include <stdio.h>
2   #include "sort.h"
3
4   void main()
5   {
6       int i;
7       //������������
8       int array[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
9       int array2[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
10
11      //�������鳤��
12      int len = sizeof(array) / sizeof(int);
13      //��������
14      printf("Sort Array:\n");
15      for (i = 0; i < len; ++i)
16      {
17          printf("%d\t", array[i]);
18      }
19      printf("\n");
20
(gdb) set listsize 10
(gdb)
(gdb)
(gdb) l 5
1   #include <stdio.h>
2   #include "sort.h"
3
4   void main()
5   {
6       int i;
7       //������������
8       int array[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
9       int array2[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
10
(gdb) l main
1   #include <stdio.h>
2   #include "sort.h"
3
4   void main()
5   {
6       int i;
7       //������������
8       int array[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
9       int array2[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
10
(gdb) l insert_sort.c:15
10      �ȶ���:�����������ȶ���
11
12  ***********************************************/
13
14  //���������㷨(��������)
15  void insertionSort(int *array, int len)
16  {
17      int tmp = 0;   // �洢��׼��
18      int index = 0; // �ӵ�λ��
19      // ������������
(gdb) l insert_sort.c:insertionSort
11
12  ***********************************************/
13
14  //���������㷨(��������)
15  void insertionSort(int *array, int len)
16  {
17      int tmp = 0;   // �洢��׼��
18      int index = 0; // �ӵ�λ��
19      // ������������
20      for (int i = 1; i < len; ++i)
(gdb) l main.c:main
1   #include <stdio.h>
2   #include "sort.h"
3
4   void main()
5   {
6       int i;
7       //������������
8       int array[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
9       int array2[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
10
(gdb)
```

4.断点相关操作:break/b

  • 给当前文件设置断点:

    • b 行号
    • b 函数名
  • 给非当前文件设置断点:
    • b 文件名:行号
    • b 文件名:函数名
  • 查看断点:info(i) b
  • 删除断点:d num(断点具体的编号,根据i b得到)
    • 删除多个:d num1 num2 或者 d num1-num6
  • 设置断点无效:dis num(断点具体的编号,根据i b得到)
    • 多个断点无效:dis num1 num2 或者 dis num1-num6
  • 设置断点生效:ena num(断点具体的编号,根据i b得到)
    • 多个断点生效:ena num1 num2 或者 ena num1-num6
  • 设置条件断点:b 行号 if 变量名 == 变量的值
  • 重新从程序开头连续执行:r
  • 执行到下一个断点停住,如果后面没有断点,程序执行结束:c
  • 查看任何东西(变量/函数等)的值:p 变量名/函数名
  • 退出gdb:q
cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB$ gdb app
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from app...done.
(gdb) l
1   #include <stdio.h>
2   #include "sort.h"
3
4   void main()
5   {
6       int i;
7       //������������
8       int array[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
9       int array2[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
10
(gdb)
11      //�������鳤��
12      int len = sizeof(array) / sizeof(int);
13      //��������
14      printf("Sort Array:\n");
15      for (i = 0; i < len; ++i)
16      {
17          printf("%d\t", array[i]);
18      }
19      printf("\n");
20
(gdb)
21      // selectionSort
22      selectionSort(array, len);
23      // printf
24      printf("Selection Sort:\n");
25      for (i = 0; i < len; ++i)
26      {
27          printf("%d  ", array[i]);
28      }
29
30      // insertionSort
(gdb) b 12
Breakpoint 1 at 0x400934: file main.c, line 12.
(gdb) b 14
Breakpoint 2 at 0x40093e: file main.c, line 14.
(gdb) b 15
Breakpoint 3 at 0x400948: file main.c, line 15.
(gdb) b 17
Breakpoint 4 at 0x400954: file main.c, line 17.
(gdb) b 19
Breakpoint 5 at 0x400989: file main.c, line 19.
(gdb) b 24
Breakpoint 6 at 0x4009aa: file main.c, line 24.
(gdb) b 27
Breakpoint 7 at 0x4009c0: file main.c, line 27.
(gdb) i b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000400934 in main at main.c:12
2       breakpoint     keep y   0x000000000040093e in main at main.c:14
3       breakpoint     keep y   0x0000000000400948 in main at main.c:15
4       breakpoint     keep y   0x0000000000400954 in main at main.c:17
5       breakpoint     keep y   0x0000000000400989 in main at main.c:19
6       breakpoint     keep y   0x00000000004009aa in main at main.c:24
7       breakpoint     keep y   0x00000000004009c0 in main at main.c:27
(gdb) d 1
(gdb) i b
Num     Type           Disp Enb Address            What
2       breakpoint     keep y   0x000000000040093e in main at main.c:14
3       breakpoint     keep y   0x0000000000400948 in main at main.c:15
4       breakpoint     keep y   0x0000000000400954 in main at main.c:17
5       breakpoint     keep y   0x0000000000400989 in main at main.c:19
6       breakpoint     keep y   0x00000000004009aa in main at main.c:24
7       breakpoint     keep y   0x00000000004009c0 in main at main.c:27
(gdb) d 2 3
(gdb) i b
Num     Type           Disp Enb Address            What
4       breakpoint     keep y   0x0000000000400954 in main at main.c:17
5       breakpoint     keep y   0x0000000000400989 in main at main.c:19
6       breakpoint     keep y   0x00000000004009aa in main at main.c:24
7       breakpoint     keep y   0x00000000004009c0 in main at main.c:27
(gdb) d 4-7
(gdb) i b
No breakpoints or watchpoints.
(gdb) l main
1   #include <stdio.h>
2   #include "sort.h"
3
4   void main()
5   {
6       int i;
7       //������������
8       int array[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
9       int array2[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
10
(gdb) l
11      //�������鳤��
12      int len = sizeof(array) / sizeof(int);
13      //��������
14      printf("Sort Array:\n");
15      for (i = 0; i < len; ++i)
16      {
17          printf("%d\t", array[i]);
18      }
19      printf("\n");
20
(gdb) l
21      // selectionSort
22      selectionSort(array, len);
23      // printf
24      printf("Selection Sort:\n");
25      for (i = 0; i < len; ++i)
26      {
27          printf("%d  ", array[i]);
28      }
29
30      // insertionSort
(gdb) b 17
Breakpoint 8 at 0x400954: file main.c, line 17.
(gdb) i b
Num     Type           Disp Enb Address            What
8       breakpoint     keep y   0x0000000000400954 in main at main.c:17
(gdb) dis 8
(gdb) i b
Num     Type           Disp Enb Address            What
8       breakpoint     keep n   0x0000000000400954 in main at main.c:17
(gdb) ena 8
(gdb) i b
Num     Type           Disp Enb Address            What
8       breakpoint     keep y   0x0000000000400954 in main at main.c:17
(gdb) r
Starting program: /home/cdl/Cpp_Tutorials/GDB/app
Sort Array:Breakpoint 8, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb) i b
Num     Type           Disp Enb Address            What
8       breakpoint     keep y   0x0000000000400954 in main at main.c:17breakpoint already hit 1 time
(gdb) d 8
(gdb) b 17 if i==10
Breakpoint 9 at 0x400954: file main.c, line 17.
(gdb) c
Continuing.Breakpoint 9, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb) p i
$1 = 10
(gdb) p main
$2 = {void ()} 0x4006ff <main>
(gdb) q

5.gdb代码调试相关命令

  • 让gdb跑起来:start(运行一行就停止)或r(停在第一个断点的位置)
  • 打印变量的值: p 变量名
  • 打印变量的类型:ptype 变量名
  • 向下单步调试:n(遇到函数不会进入函数体内部)或s(遇到函数会进入函数体内部)
  • 继续运行gdb,停在下一个断点的位置:c
  • 跳出函数体:finish,如果跳不出去,看一下函数体内部的循环中是否有断点,如果有则删掉或设置无效
  • 退出gdb: q
  • 变量的自动显示:display 变量名
  • 取消变量的自动显示:undisplay 编号
    • 编号的查询:i display
  • 从循环体中直接跳出:until(循环体中不能有断点)
  • 直接设置变量等于某一个值:set var 变量名=变量的值
cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB$ gdb app
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from app...done.
(gdb) list
1   #include <stdio.h>
2   #include "sort.h"
3
4   void main()
5   {
6       int i;
7       //������������
8       int array[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
9       int array2[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
10
(gdb) l
11      //�������鳤��
12      int len = sizeof(array) / sizeof(int);
13      //��������
14      printf("Sort Array:\n");
15      for (i = 0; i < len; ++i)
16      {
17          printf("%d\t", array[i]);
18      }
19      printf("\n");
20
(gdb)
21      // selectionSort
22      selectionSort(array, len);
23      // printf
24      printf("Selection Sort:\n");
25      for (i = 0; i < len; ++i)
26      {
27          printf("%d  ", array[i]);
28      }
29
30      // insertionSort
(gdb) b 17
Breakpoint 1 at 0x400954: file main.c, line 17.
(gdb) b 22
Breakpoint 2 at 0x400993: file main.c, line 22.
(gdb) b 27
Breakpoint 3 at 0x4009c0: file main.c, line 27.
(gdb) i b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000400954 in main at main.c:17
2       breakpoint     keep y   0x0000000000400993 in main at main.c:22
3       breakpoint     keep y   0x00000000004009c0 in main at main.c:27
(gdb) r
Starting program: /home/cdl/Cpp_Tutorials/GDB/app
Sort Array:Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb) p i
$1 = 0
(gdb) p array[i]
$2 = 12
(gdb) p len
$3 = 31
(gdb) ptype i
type = int
(gdb) ptype array
type = int [31]
(gdb) n
15      for (i = 0; i < len; ++i)
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb)
15      for (i = 0; i < len; ++i)
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb)
15      for (i = 0; i < len; ++i)
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb)
15      for (i = 0; i < len; ++i)
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb)
15      for (i = 0; i < len; ++i)
(gdb) p i
$4 = 4
(gdb) nBreakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb)
15      for (i = 0; i < len; ++i)
(gdb) p i
$5 = 5
(gdb) display i
1: i = 5
(gdb) display array[i]
2: array[i] = 35
(gdb) nBreakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
1: i = 6
2: array[i] = 67
(gdb)
15      for (i = 0; i < len; ++i)
1: i = 6
2: array[i] = 67
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
1: i = 7
2: array[i] = 89
(gdb)
15      for (i = 0; i < len; ++i)
1: i = 7
2: array[i] = 89
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
1: i = 8
2: array[i] = 87
(gdb)
15      for (i = 0; i < len; ++i)
1: i = 8
2: array[i] = 87
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
1: i = 9
2: array[i] = 65
(gdb)
15      for (i = 0; i < len; ++i)
1: i = 9
2: array[i] = 65
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
1: i = 10
2: array[i] = 54
(gdb)
15      for (i = 0; i < len; ++i)
1: i = 10
2: array[i] = 54
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
1: i = 11
2: array[i] = 24
(gdb)
15      for (i = 0; i < len; ++i)
1: i = 11
2: array[i] = 24
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
1: i = 12
2: array[i] = 58
(gdb)
15      for (i = 0; i < len; ++i)
1: i = 12
2: array[i] = 58
(gdb) i display
Auto-display expressions now in effect:
Num Enb Expression
1:   y  i
2:   y  array[i]
(gdb) undisplay 1
(gdb) undisplay 2
(gdb) nBreakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb)
15      for (i = 0; i < len; ++i)
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb) p i
$6 = 14
(gdb) i b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000400954 in main at main.c:17breakpoint already hit 15 times
2       breakpoint     keep y   0x0000000000400993 in main at main.c:22
3       breakpoint     keep y   0x00000000004009c0 in main at main.c:27
(gdb) dis 1
(gdb) i b
Num     Type           Disp Enb Address            What
1       breakpoint     keep n   0x0000000000400954 in main at main.c:17breakpoint already hit 15 times
2       breakpoint     keep y   0x0000000000400993 in main at main.c:22
3       breakpoint     keep y   0x00000000004009c0 in main at main.c:27
(gdb) n
15      for (i = 0; i < len; ++i)
(gdb)
17          printf("%d\t", array[i]);
(gdb)
15      for (i = 0; i < len; ++i)
(gdb) c
Continuing.
12  5   33  6   10  35  67  89  87  65  54  24  58  92  100 24  46  78  99  200 55  44  33  22  11  71  2   4   86  8   9Breakpoint 2, main () at main.c:22
22      selectionSort(array, len);
(gdb) p i
$7 = 31
(gdb) step
selectionSort (array=0x7fffffffdbd0, len=31) at select_sort.c:17
17      int min = 0;   // ָ����С��Ԫ�ص�λ��
(gdb) l
12  -------------------------------------------------*/
13
14  //ѡ������(��������)
15  void selectionSort(int *array, int len)
16  {
17      int min = 0;   // ָ����С��Ԫ�ص�λ��
18      // ����ѭ��
19      for (int i = 0; i < len - 1; ++i)
20      {
21          min = i;
(gdb)
22          // �ڴ�ѭ��
23          for (int j = i + 1; j < len; ++j)
24          {
25              // �ж�
26              if (array[min] > array[j])
27              {
28                  // ������С��Ԫ�ص�λ��
29                  min = j;
30              }
31          }
(gdb)
32          // �ж��Ƿ���Ҫ����
33          if (min != i)
34          {
35              // �ҵ����µ���Сֵ
36              // ����
37              int tmp = array[min];
38              array[min] = array[i];
39              array[i] = tmp;
40          }
41      }
(gdb) finish
Run till exit from #0  selectionSort (array=0x7fffffffdbd0, len=31)at select_sort.c:17
main () at main.c:24
24      printf("Selection Sort:\n");
(gdb) q
A debugging session is active.Inferior 1 [process 5911] will be killed.Quit anyway? (y or n) y
cdl@cdl-Inspiron-5421:~/Cpp_Tutorials/GDB$ gdb app
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from app...done.
(gdb) l
1   #include <stdio.h>
2   #include "sort.h"
3
4   void main()
5   {
6       int i;
7       //������������
8       int array[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
9       int array2[] = { 12, 5, 33, 6, 10, 35, 67, 89, 87, 65, 54, 24, 58, 92, 100, 24, 46, 78, 99, 200, 55, 44, 33, 22, 11, 71, 2, 4, 86, 8, 9 };
10
(gdb)
11      //�������鳤��
12      int len = sizeof(array) / sizeof(int);
13      //��������
14      printf("Sort Array:\n");
15      for (i = 0; i < len; ++i)
16      {
17          printf("%d\t", array[i]);
18      }
19      printf("\n");
20
(gdb)
21      // selectionSort
22      selectionSort(array, len);
23      // printf
24      printf("Selection Sort:\n");
25      for (i = 0; i < len; ++i)
26      {
27          printf("%d  ", array[i]);
28      }
29
30      // insertionSort
(gdb) b 17
Breakpoint 1 at 0x400954: file main.c, line 17.
(gdb) r
Starting program: /home/cdl/Cpp_Tutorials/GDB/app
Sort Array:Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb) start
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Temporary breakpoint 2 at 0x40070a: file main.c, line 5.
Starting program: /home/cdl/Cpp_Tutorials/GDB/app Temporary breakpoint 2, main () at main.c:5
5   {
(gdb) c
Continuing.
Sort Array:Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb) p i
$1 = 0
(gdb) p array[i]
$2 = 12
(gdb) set var i=5
(gdb) p i
$3 = 5
(gdb) p array[i]
$4 = 35
(gdb) until
15      for (i = 0; i < len; ++i)
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb)
15      for (i = 0; i < len; ++i)
(gdb) Breakpoint 1, main () at main.c:17
17          printf("%d\t", array[i]);
(gdb)
15      for (i = 0; i < len; ++i)
(gdb) p i
$5 = 7
(gdb) i b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000400954 in main at main.c:17breakpoint already hit 3 times
(gdb) d 1
(gdb) display i
1: i = 7
(gdb) until
19      printf("\n");
1: i = 31
(gdb)
35  67  89  87  65  54  24  58  92  100 24  46  78  99  200 55  44  33  22  11  71  2   4   86  8   9
22      selectionSort(array, len);
1: i = 31
(gdb) q
A debugging session is active.Inferior 1 [process 6938] will be killed.Quit anyway? (y or n) y

6.更多gdb命令

  • 更多gdb命令请点击这里

gdb调试工具的使用相关推荐

  1. 用一个例子告诉你gdb调试工具如何使用

                                        用GDB调试程序 GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式 ...

  2. 使用 Strace 和 GDB 调试工具的乐趣

    编写 UNIX® 系统程序充满乐趣,并且具有教育意义.使用 UNIX strace 工具和 GDB(GNU 项目调试工具),您可以真正地深入研究系统的功能,并了解组成这些功能的各种各样的程序.同时使用 ...

  3. linux卸载gdb命令,Linux_Unix卸载gdb调试工具出现问题的解决方法,  Unix系统通过命令能够卸载 - phpStudy...

    Unix卸载gdb调试工具出现问题的解决方法 Unix系统通过命令能够卸载安装的程序,但有用户在用make uninstall命令卸载gdb调试工具时出现了问题,卸载失败,下面小编就教大家Unix如何 ...

  4. GDB 调试工具使用指南

    GDB 概述 GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具.也许大多数开发人员比较喜欢那种图形界面方式的,像 VC . BCB 等 IDE 的调试,但如果你是在 UNIX ...

  5. 《深入分析GCC 》——2.2 GNU gdb调试工具

    本节书摘来自华章出版社<深入分析GCC >一书中的第2章,第2.2节,作者 王亚刚 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.2 GNU gdb调试 ...

  6. Linux下gdb调试工具的使用

    gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具. gdb主要完成四个方面的功能:(1).启动你的程序,可以按照你的自定义的要求随心所欲的运行程序:(2).可让被调试的程序在你所指定的 ...

  7. C 语言编程 — GDB 调试工具

    目录 文章目录 目录 前文列表 代码调试 GDB 启动 GDB 交互命令 运行程序 暂停程序 设置断点 设置观察点 设置捕捉点 打印信息 查询运行信息 分割窗口 前文列表 <程序编译流程与 GC ...

  8. 【C语言基础】gdb调试工具的使用

    gdb调试教程 快速入门 要想快速入门gdb调试,可以直接翻阅基本案例:采内存 介绍 GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具. 对于 ...

  9. 阿龙的学习笔记---Linux GDB 调试工具(博客转载总结)

    GDB基础操作:https://blog.csdn.net/21cnbao/article/details/7385161 100个GDB小技巧,忒多了,留着以后看.https://www.kancl ...

最新文章

  1. ICCV19 (Oral) | 基于贝叶斯损失函数的人群计数
  2. python(十七)
  3. 同一局域网内_Pycharm访问服务器
  4. python下载网页中的pdf文件_【Python】Python的urllib模块、urllib2模块批量进行网页下载文件...
  5. MyBatis-Plus之通过插件将数据库表生成Entiry,Mapper.xml,Mapper.class的方式。
  6. 《知易行难》扩展练习
  7. WebSocket | 为什么你前后端推送不会用?因为你少了WebSocket的帮忙
  8. 大学编程python_大学生想学一门编程语言傍身,Python可以吗?
  9. @程序员,如何在编程面试中脱颖而出?
  10. Java基础之Http协议的理解与总结
  11. DR/BDR是解决什么问题的?
  12. win11 跳过检测直接升级
  13. RSS精选(一)-文摘
  14. Java 和 || 优先级
  15. 清华大学计算机专业考试408,2018年清华大学计算机科学与技术系408计算机学科专业基础综合之计算机操作系统考研基础五套测试题...
  16. 数据结构—线性表顺序存储插入和删除操作
  17. 银行账户(静态成员与友元函数)
  18. android打地鼠游戏
  19. 【正点原子STM32连载】 第三十八章 红外遥控实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  20. Springboot+sqlserver+Quartz整合报错: Failure obtaining db row lock: 第 1 行: 只有 DECLARE CURSOR 才允许使用 FOR U

热门文章

  1. PC软件/web网站/小程序/手机APP产品如何增加个人收款接口
  2. 2018-2019-1 20165318《信息安全系统设计基础》第八周课上测试
  3. springcloud与dubbo对比:
  4. Commvault公司营收增长 但本季度仍身陷亏损
  5. 【大数据技术干货】阿里云伏羲(fuxi)调度器FuxiMaster功能简介(一) 多租户(QuotaGroup)管理...
  6. SpringBoot资料整理(3)
  7. SCSI软件层对性能的影响
  8. 双系统如何删除Linux
  9. Linux进程的分析和执行过程
  10. 面试官:Redis新版本开始引入多线程,谈谈你的看法?