1.GDB使用
(1)编译时采用-g参数。
(2)gdb +可执行文件
。
(3)core文件解析:gdb + 可执行文件 + core文件
(ubuntu core文件生成 执行前运行unlimit -c unlimited
设置core文件大小无限制,另对于段错误,gdb运行程序,直接执行,程序停止的位置即为段错误导致的地方)
(4)显示程序源码:
l(list) 显示默认10行
l(list)+ 函数名
l(list)+ 文件名:函数名
(5)程序运行
r(run) 运行直到遇到断点
c(continue) 继续执行到下个断点
u(until) 行号 运行至某行(单执行u跳过当前循环)
call function(params) 调用程序中可见函数
s(step) 逐步会进入函数体
finish 跳出进入的函数体
n(next) 逐过程
(6)退出gdb q(quit)。
2.断点设置
(1)基本设置
b(break) 函数名
b(break) 行号
b(break) 文件名:函数名
b(break) 文件名:行号
(2)条件断点:在当变量某个条件停止
例:b 20 if var == 66
(3)查看 ,删除,使能,停用断点
i(info) b(break) 查看断点信息
delete + 断点ID 删除指定断点
enable + 断点ID 使能指定断点
disable + 断点ID 停用指定断点
3.变量操作
(1)查看变量值变量类型
p(print) 变量名 查看变量值
ptype 变量名 查看变量类型
(2)变量显示
display var
(3)设置变量值
set var 变量名 = n
(4)变量监视
watch <表达式>:表达式发生变化时暂停运行
awatch <表达式>:表达式被访问、改变时暂停执行
rwatch <表达式>:表达式被访问时暂停执行
4.多进程调试
默认跟踪父进程,在运行过程中可通过set follow-fork-mode child和set follow-fork-mode parent来跟踪子进程和父进程。