1:debug与release的介绍
在Linux下使用GBD(GNU Build Debugger)进行调试时,release,
?debug?
是两种不同的编译选项,它们分别对应不同的编译配置。 只有将release编译配置更改为debug,才能使用gdb调试
? ? ? ? ? ? ? ? ? ?release:
通常用于生产环境的编译,它通常会启用一些优化选项以提高编译速度和程序性能,同时可能会关闭一些调试信息。
? ? ? ? ? ? ? ? ? ? debug:
则主要用于调试,它通常会包含更多的调试信息,以便于开发者在调试过程中查看和跟踪程序的运行状态。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?release编译配置更改为debug
要将默认的release
编译配置更改为debug
,你可以在GBD命令中添加相应的选项。具体的方法取决于你使用的GBD工具和构建系统。以下是一些常见的做法:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
-
使用Makefile文件进行构建:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Makefile中添加? CFLAGS += -g -O0
(其中-g
表示启用调试信息,-O0
表示禁用优化)。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?或者 Makefile中编译目标文件 末尾带上 -g?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
-
GBD命令行工具进行构建:
?????????gbd build -j <num_jobs> --debug(
<num_jobs>
是并行构建的线程数)
? ? ? ? ??
???????
2:dgb的使用命令
gdb 的使用作用于可执行程序:
gdb binFile
退出:
ctrl + d
或
quit
调试命令:
list
/
l
行号:显示
binFile
源代码,接着上次的位置往下列,每次列
10
行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step
:进入函数调用
finish:执行到当前函数返回,然后挺下来等待命令
print(p)
:打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set?var
:修改变量的值?
info(
或
i) locals
:参看当前栈的变量
continue(或c):从当前位置开始连续而非单步执行程序(到下一个断点)
bt:从当前位置开始生产栈堆跟踪
run(或
r)
:从开始连续而非单步执行程序
break(b)? 行号? ? ? ? ?:在某一行设置断点
break?
函数名? ? ? ? ? ? :在某个函数开头设置断点
delete?breakpoints? ?:删除所有断点
??
delete?breakpoints?n:删除序号为n的断点
disable?breakpoints??:禁用断点
enable?breakpoints??:启用断点
info break :查看断点信息。
info(
或
i)?breakpoints
:参看当前设置了哪些断点
display?变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(
或
bt)
:查看各级函数调用及参数
info
(
i)?locals
:查看当前栈帧局部变量的值
quit
:退出
gdb