
1. 软件发布形式
一般的软件发布有两种:
debug:可以被调试,形成的可执行程序会添加调试信息—>用户不需要+体积大
release:形成的可执行程序会去掉调试信息(面向用户)
调试时使用的是debug
模式
- gcc/g++编译时动态链接,默认release发布
gcc -o $@ $^ -g
-g
以debug方式发布
可执行呈现的格式->ELF
redelf
2. 安装gdb
yum install -y gdb
:安装gdb调试软件
3. 调试命令
l 行号/函数名/文件名
显示代码内容(记录最近一次操作,下方向键)
r
重新运行
c
(continual)运行到下一个断点
b
(Break point)打断点——进行范围定位排除
b 行号/内容
打断点
b 文件名:行号
info b
用来查看断点
d 断点编号
删除断点
disable 断点编号
禁用断点
enable 断点编号
使能(禁用/开启)断点
n
(next)逐过程
s
(step)逐语句
逐语句(
;
为分隔符):进入一个函数(对应VS中的F11)
逐过程:每一行看作一个整体,把一行看作一个整体,包括函数。
p +变量/&地址
显示变量的地址和内容,相当于监视;
display 变量名/取地址
:常显示变量的地址和内容;
undisplay +编号
取消常显示变量的地址和内容;
- 范围查找(从上至下依次扩大范围)
c
(continual)运行到下一个断点
fin
(finish):将一个函数运行结束就停下来
until 行号
:在一个范围内,直接运行到指定行
bt
:查看调用堆栈
set var name=value
:修改一个变量的内容,不用改代码就像多分支测试;
4. 调试本质:
- 找到问题(二分思想范围查找,局部逐行查找),以上所有指令都是为了找到问题;
- 解决问题(上下文代码)
