GDB调试命令

1、程序运行参数。

可指定运行时参数。(如:set args 10 20 30 40 50)

set args

命令可以查看设置好的运行参数

show args


 

2、 运行环境。

path <dir> #可设定程序的运行路径。 
show paths #查看程序的运行路径。 
set environment varname [=value] #设置环境变量。如:set env USER=hchen 
show environment [varname] #查看环境变量。 

 

3、工作目录。

cd <dir> #相当于shell的cd命令。 
pwd #显示当前的所在目录。 
dir <src_path> #设置源码目录

 

4、调试

显示别的文件:l “文件名.后缀名”:行号 (双引号不能少)
在别文件打断点:b “文件名.后缀名”:行号

gdb -q exe #表示不打印gdb版本信息,界面较为干净;
命令 l r(运行) b c(continue) s(单步调试) n(next) p q watch(监视变量变化)
gdb attach 进程pid #(附加进程调试,附加进去之后,使用命令c)

 

5、查看core和堆栈

gdb -c core文件 #core文件对应的可执行程序
set solib-search-path [DIR] #设置加载动态库的路径,堆栈在动态库的时候需要设置
bt #查看堆栈
thread apply all bt #查看所有线程堆栈 

 

6、开启core

#只能root用户执行,sudo无效
ulimit -a

ulimit -c unlimited

echo "/home/leagsoft/SafeDataExchange/Log/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

echo "1" > /proc/sys/fs/suid_dumpable 

source /etc/profile

#关闭core生成
ulimit -c 0

 

7、判断程序是否带-g编译

readelf --debug-dump=decodedline libblowsnow.so

提示:mac系统lldb调试,可以平替gdb


 

8、gdb打印相关命令

p/t variable_name 以二进制打印变量
p/t variable_addr 以二进制打印地址内容
p/a 能够以指针的方式输出变量
使用 set output-radix 16 修改print操作默认输出格式为16进制,使用 set output-radix 10 将输出格式调回默认的10进制。
display 的用法与 print 的用法相似,但是 display 会在每次步进执行后输出该变量。这个功能与Visual Studio中的Watch功能比较类似。在不想观察该变量时,使用 undisplay 命令可以取消

使用 x 命令可以将指定内存地址中的内容打印出来。
简要的命令语法如下:
x/nfu


n 用于指定打印的数量
f 用于指定打印的格式
u 用于指定每个打印变量的长度:b(byte)一个字节,h(half-word)两个字节,w(word)四个字节,g(giant word)八个字节

打印字符无限制
set print elements 0

可以让gdb打印变量一行一行的显示,而不是一堆
set print pretty on

只运行当前线程
set scheduler-locking on

打印vector元素
p *(vt._M_impl._M_start)@1
vt, 容器名字
1,第几个元素,从1开始

打印map元素
Pmap val_name type type


 

9、gdb调试循环

for(i = 0;i < 100; i++)
watich i 	#监视i变量
info b		#查看i是第几个变量。假设是第n个断点
#假设我想查看低70次循环
ignore n 70	#设置忽略对i的70次监视
c		#跳转至第70次循环

gdb屏蔽信号handle SIGUSR1 nostop


 

10、gdb后台调试

用gdb --command=filename命令,将gdb调试命令预先存储在filename命令中。

b main
c
bt
q
#然后启动
nohup gdb -p pid --command=filename &

 

11、gdb如何在程序崩溃时将堆栈信息保留

#线一直attach进程,提前设置好处理的命令。
handle SIGPIPE nostop noprint 
handle SIGSEGV stop
handle SIGABRT stop
c
set logging file ./gdb_bt.txt
set logging on
thread apply all bt
set logging off
c
#这样在崩溃时就会将堆栈打到文件里面

发现编译出来的文件无法调试,使用其他版本的编译 -gdwarf-3 -gdwarf-1 -gdwarf-2 -gdwarf-4


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值