目录
一.前言
LInux系统下调试代码用到的工具是gdb,命令行的形式,肯定没有VS的调试器好用,毕竟人家是图形化界面非常灵活,而gdb还要输入命令。但gdb也算是Linux系统下为数不多的好用的调试器了,gdb的命令有很多,但只需掌握常用的几个够用就行了。
二.debug和release
一份代码有两种编译模式,debug和release,debug模式生成的可执行程序中包含调试信息,而release中不包含。
所以release版的可执行程序比debug版要小,给用户使用的也是release版,另外,release模式在编译时编译器还会做一些优化,所以有时候一个程序的debug版没有问题,但release却有问题,是因为编译器的自作聪明,好心办了坏事。
编译器gcc/g++默认使用release模式编译代码
但release版是没有调试信息的,当执行以下命令时
gdb mybin (mybin是gcc用编译形成的可执行程序)
要想调试,必须得到debug版的可执行程序
gcc code.c -o mybin -g
-g选项表示用debug模式编译代码
三.常用命令
1.查看代码
用gdb打开可执行程序,源代码没有显示出来
可以使用如下命令查看代码
l(list) 10
功能:查看第10行的源代码
l function
功能:查看指定函数的源代码(全局搜索,可不指定文件)
l file:10
功能:查看第file文件的第10行的代码
2.更改显示的代码行数
set listsize 20
功能:把每次显示源代码的行数改为20行(默认是10行)
3.开始调试
r(run)
功能:开始调试,遇到断点就停下,如果没有断点,直接跑完程序
4.设置断点
b(break) 10
功能:在第10行设置一个断点
b file:10
功能:在file文件的第10行设置一个断点
b func
功能:在fun行数的入口处设置一个断点(全局搜索,可不指定文件)
info b
功能:查看断点信息
d(delete) num (num是断点的编号)
功能:删除断点(d后面只能跟断点的编号,不能是行号和函数名)
disable num (num是断点编号)
功能:禁用断点
enable num (num是断点编号)
功能:启用断点
5.代码执行
n
功能:逐过程,相当于VS的F10
s
功能:逐语句,相当于VS的F11
c(continue)
功能:运行到下一个断点处停下
until 10
功能:运行到第10行停下
finish
功能:运行完当前函数就停下
6. 查看变量
p n
功能:显示变量n的值
display n
功能:长期显示变量n的值
undisplay num (num是长显示变量的编号)
功能 :取消长期显示变量n的值
info i
功能:查看当前的局部变量的值
bt
功能:查看调用堆栈
7.更改变量的值
set var i = num
功能:把变量i的值更改为num