..

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

==