GDB 检测内存泄漏相关 (Linux C++)

本文介绍如何使用GDB工具检测程序中的内存泄漏问题。通过在malloc和free函数处设置断点并分析调用栈,可以定位内存泄漏的具体位置。文章还提供了具体的GDB命令和示例,帮助读者掌握内存泄漏检测的方法。

内存泄漏检测:

使用GDB在malloc和free函数设置断点,并打印分配和释放时的内存地址以及调用栈,然后通过脚本分析分配和释放是否配对来检测是否存在内存泄露以及发生内存泄漏的位置。

内存泄漏分析脚本,检测malloc释放有配对的free,如果没有那么打印该malloc的调用栈,通过调用栈可以找到分配内存的位置。

 

GDB 检测内存泄漏命令:

run

(gdb) info proc   

(gdb) shell pmap 10683

[root@...]# ps faxu

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 2 0.0 0.0 0 0 ? S 3月14 0:00 [kthreadd]

root 3592 11.8 25.3 9110048 2009168 ? Sl 3月14 179:33 \_ ./H323Gateway -x -c -i ../etc/H323Gateway.conf -m s.cgw.10.35.10.53 -n s.h323gw.10.35.10.53 -b tcp://127.0.0.1:10882

能够看到H323Gateway进程RSS巨大,可得出明显存在内存泄漏。

 

DGB 显示内存情况命令参数:

格式: x /nfu

说明:
x 是 examine 的缩写,意思是检查。

n表示要显示的内存单元的个数,比如:20

f表示显示方式, 可取如下值:

x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。

u表示一个地址单元的长度:

b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节

 

GDB 命令: 

gdb ExeName : 开始调试,-tui选项,分屏调试

break 函数名/行号 : 添加断点  (以行号添加时注意编译时要加-g选项,以在可执行文件中保存行号)

next(n)/next : 跳跃步数(执行一行,遇到函数不进入函数内部)

step : (同next,但是进入函数内部)

list : 列出代码上下文

print x

continue : 进行下次迭代

run : 开始调试

backtrace : 查看从哪里来,显示出所有当前存在的栈帧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值