..
Gdb_ues_info
1.进入
gdb 【可执行程序】
#或者
gdb -q 【可执行程序】
2.查看程序源码
(gdb)list
3.设置断点
#在某一行设置断点
(gdb)break 【数字,行号】
#查看所有断点信息
(gdb)info breakpoints
# Num: 断点编号
# Disp:断点执行一次之后是否有效(keep:有效 dis:无效)
# Enb: 当前断点是否有效 (y:有效 n:无效)
# Address:内存地址
# What:位置
4.运行程序
# 当程序接收到SIGILL信号(非法指令信号)时,GDB将不会在程序停止执行,而是继续执行下去
(gdb)handle SIGILL nostop
#开始运行程序,遇到断点会停下
(gdb)run
5.调试
(1)为程序添加相应的指令
# 使用gdb进入程序
gdb 【可执行程序】
# ......
# 例如使用 gtest 运行单个测试套件
(gdb)set args --gtest_filter=【测试套件名】
(2)程序运行
#单步执行程序,但是遇到函数时会直接跳过函数,不进入函数
(gdb)next
#单步执行程序,但遇到函数会进入函数
(gdb)step
#继续执行程序,直到遇到断点或结束
(gdb)continue
(3)变量调试
#查看变量值
(gdb)print 【变量】
#查看变量数据类型
(gdb)whatis 【变量】
6.退出
(gdb)quit
#或者
(gdb)q
7.其他命令
(1)运行命令
until | 如果你厌倦了在一个循环内单步跟踪,它可以运行程序直到退出循环体 |
---|---|
until + 行号 | 运行至某行 |
finish | 运行程序,直到当前函数返回完成,并且打印函数返回时的堆栈地址和返回值及参数值等信息 |
call + 行数 + (参数) | 调用程序中可见的函数,并传递参数,如:call gdb_test(66) |
(2)断点
delete + n | 删除第n个断点 |
---|---|
disable + n | 暂停第n个断点 |
enable + n | 开启第n个断点 |
clear + n | 清除第n行的断点 |
info b ( info breakpoint ) | 显示当前程序的断点设置情况 |
delete breakpoints | 清除所有断点 |
(3)运行信息
where / bt | 当前运行的堆栈列表 |
---|---|
bt backtrace | 显示当前调用堆栈 |
up / down | 改变堆栈显示的深度 |
set args + 参数 | 指定运行时的参数 |
show args | 查看设置好的参数 |
info program | 查看程序是否在运行,以及进程号被暂停的原因 |
(4)使用gdb(7.12版本及以上适用)时跳过标准文件
根据step命令获得的标准文件路径
然后添加文件~/.gdbinit
# To skip all .h files in 【文件路径】
skip -gfi 【根据step获得的文件路径】
如果要跳过特定文件,比如 stl_vector.h,请将下面的行添加到 ~/.gdbinit
# To skip the file 【文件路径】/stl_vector.h
skip file 【文件路径】/stl_vector.h
==