gdb调试
设置断点:b main.c:10
然后运行程序:run
断点处可以查看变量:display a
其它命令:
(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h
(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r
(gdb)start:单步执行,运行程序,停在第一执行语句
(gdb)list:查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l
(gdb)set:设置变量的值
(gdb)next:单步调试(逐过程,函数直接执行),简写n
(gdb)step:单步调试(逐语句:跳入自定义函数内部执行),简写s
(gdb)backtrace:查看函数的调用的栈帧和层级关系,简写bt
(gdb)frame:切换函数的栈帧,简写f
(gdb)info:查看函数内部局部变量的数值,简写i
(gdb)finish:结束当前函数,返回到函数调用点
(gdb)continue:继续运行,简写c
(gdb)print:打印值及地址,简写p
(gdb)quit:退出gdb,简写q
(gdb)break+num:在第num行设置断点,简写b
(gdb)info breakpoints:查看当前设置的所有断点
(gdb)delete breakpoints num:删除第num个断点,简写d
(gdb)display:追踪查看具体变量值
(gdb)undisplay:取消追踪观察变量
(gdb)watch:被设置观察点的变量发生修改时,打印显示
(gdb)i watch:显示观察点
(gdb)enable breakpoints:启用断点
(gdb)disable breakpoints:禁用断点
(gdb)x:查看内存x/20xw 显示20个单元,16进制,4字节每单元
(gdb)run argv[1] argv[2]:调试时命令行传参
GDB完全工具手册
说明:工具仅为了自己使用,不设学习前后顺序。
工具目录:
一. GDB使用set修改变量的值
【命令一】: GDB使用set修改变量的值
使用gdb修改临时变量的值,可以使用set命令和print命令。
1.调试中需要修改临时变量的值时,可以使用set命令
语法:(1)set variable key = value
(2)set var key = value
示例:set variable array[1] = 12
(如果变量名和GDB内置变量冲突,使用set var v=value)
2. print命令修改,更简单
语法:print key=value
示例:(gdb)print array[1] = 12
说明:当你使用**cachep时,cachep[i],i=2,若想在gdb的时候动态分配内存,手动设值,让其走到cachep[1]=NULL的错误检查路径,可以如下操作,即可。
GDB断点调试
GDB断点调试步骤
Gdb tpdm(可执行文件:b .cpp :(行号)
运行:r plan(参数)
单步(跳入自定义函数内部执行):s
N
P变量
gdb无法单步调试
使用gdb调试单步程序时如果打印提示“single stepping until exit from function xxx,which has no line number information”,可能的原因有两个:
1 编译源文件时没有加-g选项;
2 gcc与gdb版本不兼容,通常是由于手工对gcc程序进行了升级,导致现有gdb程序版本过旧,比如gcc升级到4.8版本,gdb仍为旧的7.2版本。此时需要下载新版gdb源码包(7.8版本可行),手工升级gdb。
./configure
make & make install
cp -fv ./gdb/gdb /usr/bin/