文章目录
一、安装gdb调试器:
终端输入命令:
sudo apt-get update
sudo apt-get install gdb
二、使用gcc编译程序:
使用GCC编译你的程序时,加上-g选项以包含调试信息:
gcc -g -o myprogram myprogram.c
三、使用gdb对程序进行调试:
推荐:
gdb -tui myprogram
1.设置断点和删除断点
1.1 使用break命令或简写为b来设置断点:
第一种:break + 函数名:
(gdb)break main
第二种:break + 某个文件的特定行:
(gdb)break main.c:11
1.2 使用delete删除断点:
首先:先使用info breakpoints查看已经设置的断点
(gdb)info breakpoints
然后:使用delete + 断点编号删除断点
(gdb)delete 1
1.3 删除所有断点:
此外,如果你想删除所在行的所有断点,可以使用clear命令。具体用法如下
clear location:删除所选定的环境中所有的断点。
clear list_insert:删除函数list_insert的所有断点。
clear list.c:list_delet:删除文件list.c中list_delet函数的所有断点。
clear 12:删除行号为12的所有断点。
clear list.c:12:删除文件list.c中行号为12的所有断点。
2.调试运行——run:
输入run程序将开始执行遇到断点时停下:
(gdb)run
3.继续执行——continue/c:
(gdb)continur
或者
(gdb)c
想要程序继续执行输入continue或者c,程序会继续执行,遇到断点时停下:
4.单步执行:
1.使用next命令:
- next命令(简写为n):用于执行当前行的代码,并进入下一行。如果当前行包含函数调用,next命令会将整个函数视为单步执行,而不会进入函数内部。
(gdb) next
2.使用step命令:
- step命令(简写为s)也用于单步执行代码,但不同的是,如果当前行包含函数调用,step命令会进入函数内部并逐行执行。这对于跟踪函数内部的执行非常有用。
(gdb) step
3.使用until命令:
- until命令可以运行程序直到退出当前循环体或到达指定的代码行。这对于快速跳过循环或执行到特定位置很有用。
(gdb) until line_number
5.监视变量:
1.使用print或p命令:
- 这是最直接的方法。你可以在GDB的命令行中输入print 变量名或简写为p 变量名来查看变量的当前值。例如,如果你有一个名为x的变量,你可以输入p x来查看其值。如果程序在执行过程中改变了x的值,你可以再次使用p x来查看新的值。
(gdb)print b
(gdb)p b
2.使用display命令:(推荐)
- 如果你想要在每次程序暂停时都自动显示某个变量的值,可以使用display命令。例如,display x会在每次断点或程序暂停时自动打印变量x的值。这对于观察频繁变化的变量特别有用。
(gdb)display b
3.使用watch命令:
- watch命令允许你设置一个观察点,当指定的变量或表达式的值发生改变时,程序会自动暂停。这对于实时监控某个变量的变化非常有用。例如,watch x会在变量x的值发生改变时暂停程序。
(gdb)watch b
//记住必须要在变量b已经被创建的情况下才有效
4.使用info locals命令:
- 这个命令可以列出当前作用域内的所有局部变量及其值。这对于快速查看多个变量的当前状态很有帮助。
(gdb)info locals
6.退出gdb调试器——quit:
- 如果你现在想要退出GDB,只需在GDB的命令行提示符下输入quit,然后按Enter键。
(gdb)quit