linux gdb 下程序调试方法

本文详细介绍GDB的高级用法,包括查看内存地址值、打印表达式、反汇编查看、栈信息分析等,帮助读者掌握GDB的深度调试技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gdb查看指定地址的内存地址的值:examine 简写 x-----使用gdb> help x 来查看使用方式
     x/ (n,f,u为可选参数)
n: 需要显示的内存单元个数,也就是从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义
f:显示格式
               x(hex) 按十六进制格式显示变量。
               d(decimal) 按十进制格式显示变量。
               u(unsigned decimal) 按十进制格式显示无符号整型。
               o(octal) 按八进制格式显示变量。
               t(binary) 按二进制格式显示变量。
               a(address) 按十六进制格式显示变量。
               c(char) 按字符格式显示变量。
               f(float) 按浮点数格式显示变量
u:每个单元的大小,按字节数来计算。默认是4 bytes。GDB会从指定内存地址开始读取指定字节,并把其当作一个值取出来,并使用格式f

来显示
               b:1 byte     h:2 bytes     w:4 bytes g:8 bytes
     比如x/3uh 0x54320表示从内存地址0x54320读取内容,h表示以双字节为单位,3表示输出3个单位,u表示按照十进制显

gdb打印表达式的值:print/f 表达式
f是输出的格式,x/d/u/o/t/a/c/f
	 
反汇编查看:	
	disass func	

查看当前程序栈的内容: x/10x $sp-->打印stack的前10个元素
查看当前程序栈的信息: info frame----list general info about the frame
查看当前程序栈的参数: info args---lists arguments to the function
查看当前程序栈的局部变量: info locals---list variables stored in the frame
查看当前寄存器的值:info registers(不包括浮点寄存器) info all-registers(包括浮点寄存器)
查看当前栈帧中的异常处理器:info catch(exception handlers)	

显示当前断点所在行的汇编指令:
				display /i $pc


	1、写一个日志, 来查看线程
	2、ps -aux | grep 'bin'  //得到进程ID
	   gdb attach ID	 //gdb调试
	   info threads          //查看线程
	   thread apply all bt   //查看所有线程堆栈
	   t 线程id              //查看其中一个线程
	   bt                    //线程堆栈查看
	   f  i			 //调出第i层栈信息
	   l   根据代码分析原因
	3、转储	
	   ulimit ‐c  unlimited
	   gdb  helloworld   core.*
	   core-file  core.*
	4、set follow-fork-mode [child|parent]
	

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值