gdb调试命令

方法一:gdb [exec file] [core file] 方法二:gdb -c [core file] [exec file]
finish 连续运行到当期函数返回为止,然后停下来等待命令
info locals(或i locals或I locals) 查看当前栈帧局部变量的值
list(或l) 列出源代码,列出此刻运行到代码行的函数的上下文代码
list 行号 列出从第几行开始的源代码
list  n1n2 显示n1行和n2行之间的代码
list 函数名 列出某个函数的源代码
list  ,last 显示以指定的last为结束行,显示10行
list  + 以上次显示的结束行为起始行显示后10行
list  - 以上次显示的起始行为结束行显示前10行
next(或n) 执行下一行语句
print(或p) 打印表达式的值,通过表达式可以修改变量的值或者调用函数
print *a@10 如果a是一个数组,这样显示数据的10个元素的值
print var=10 修改运行时变量的值
quit(或q) 退出gdb调试环境
set 变量=变量值 修改变量的值
set args  参数1 参数2 设置运行参数
show args 查看运行参数
set width 数目 设置GDB的行宽
set listsize  数目 设置查看源代码时每次显示的行数
show listsize 显示已设置的显示行数
start 开始执行程序,停在main函数第一行语句前面等待命令
step(或s) 执行下一行语句,如果有函数调用则进入到函数中
break(或b) 行号 在某一行设置断点
break  函数名 在某个函数开头设置断点
break 34 if var=12 设置条件断点,当var等于12的时候就在34行设置断点
break Refresh.cpp:120 在文件Refresh.cpp的第120行设置断点
b filename:function 在文件的函数前设置断点
b 0x3400a 用于在内存某一位置处设置断点
tbreak 行号 设置临时断点,到达后断点自动删除
tbreak 函数名 设置临时断点,到达后断点自动删除
cd 目录 切换工作目录
pwd 显示程序工作目录
continue(或c) 从当前位置开始练习运行程序,直至下一个断点或者结束
delete N 删除标号为N的断点,标号是自动递增的,可以通过info b获取
delete 删除所有断点
delete breakpoint(或者delete breakpoints) 删除所有断点
delete breakpoint N(或者delete breakpoints N) 删除标号为N的断点,标号是自动递增的,可以通过info b获取
clear 行号 删除行号处的断点(delete是根据断点标号进行删除)
clear 函数名 删除函数名处的断点
clear Refresh.cpp:120 删除在文件Refresh.cpp的第120行的断点
display 变量名 跟踪查看某个变量,每次停下来都显示它的值
undisplay  跟踪显示号 取消跟踪显示
info display 用于显示当前所有要显示值的表达式的情况
disable breakpoints N 禁用标号为N的断点(执行info b后Enb字段标识断点状态,n为禁用,y为启用)
disable n1 n2 禁用多个标号对应的断点,多个断点间用空格分隔
enable N 启用标号为N的断点
enable n1 n2 启用多个标号对应的断点,多个断点间用空格分隔
info breakpoints(或info b) 查看当前设置的断点
run(或r) 从头开始连续运行程序
watch 变量名 设置一个观察点,当变量的值发生变动(即写入)时暂停程序
rwatch 变量名 设置一个观察点,当变量被读出时暂停程序
awatch 变量名 设置一个观察点,当变量被读出或写入时程序被暂停
info watchpoints N 查看标号为N的观察点
whatis 变量名 显示某个表达式的数据类型
return 返回值 改变程序流程,直接结束当前函数,并将返回值返回
call 函数名 在当前位置执行所要运行的函数
until 在循环体内跟踪程序,直到整个循环结束
until  行号 运行至指定行,可以用于跳出循环
set environment varname [=value] 设置环境变量,如:set env USER=hchen
show environment [varname] 查看环境变量
   
用gdb实时观察某进程crash信息  
gdb -p PID 启动进程
c 运行进程至crash,gdb会显示crash信息
   
core/堆栈相关命令  
backtrace(或bt) 查看各级函数调用及参数
frame(或f)  帧编号 选择栈帧
info reg 查看寄存器使用情况
info stack 查看堆栈使用情况
up/down 跳到上一层/下一层函数
where 显示当前线程调用堆栈
   
   
info inferiors 查看进程
info threads 查看所有线程列表
thread num 切换线程
set scheduler-locking on 设置只执行当前线程的函数
set scheduler-locking off
set print elements 0 显示完整的字符串
set print pretty on 格式化打印
p /x var 以16进制显示var的值     x 16进制     d 10进制     t 二进制     c 按字符格式显示变量     f 按浮点数 print *a@10 //如果a是一个数组,这样显示数据的10个元素的值 print var=10 //修改运行时变量的值 whatis var //显示一个变量的类型 ptype var //更详细的方式显示变量var的类型,会打印出var的结构定义 4、编译的时候要加入-g选项,才可以对程序进行跟踪 core调试 1、$sudo gdb binpath corepath 2、bt 查看调用堆栈 3、f 5...假设断的代码在栈号为5这里 4、info locals 查看局部变量 5、info args 查看函数参数的值 6、info catch 查看异常 7、info r 查看寄存器 8、up,down切栈帧 手动生成core文件: gcore pid (进程号) //查看当前运行的进程 ps aux|grep a.out //查看当前运行的轻量级进程 ps -aL|grep a.out //查看主线程和新线程的关系 pstree -p 主线程id
上一篇:Hexagon GDB Debugger介绍(18)


下一篇:反汇编测试