GDB: 使用 Linux GDB 识别内存泄漏

使用 Linux GDB 识别内存泄漏

摘要

本文档介绍如何在 Linux 上使用 GDB 跟踪内存泄漏。本文档适用于通过 malloc() 分配但未释放的内存块的内存泄漏问题。

正文

调试器运行速度较慢,可能会导致性能问题。如果可以通过 LD_PRELOAD 或其他方式覆盖默认的 malloc()/free() 例程,这可能比使用调试器更快且更简单。

注意:下面提供的 GDB 脚本可以根据需要进行修改。需记住,由于 GDB 版本、操作系统版本、编译选项等因素,可能会导致结果略有不同,因此应将此脚本视为一个基础,而不是在所有平台上对任何可执行文件都适用的通用解决方案。

首先,我们需要明确要做的事情:

  • 每次进入 malloc() 时,应将请求分配的内存大小保存到一个变量中。
  • 每次从 malloc() 返回时,应打印大小和从 malloc() 返回的地址。
  • 每次进入 free() 时,应打印即将释放的指针。

由于我们不希望每次进行内存分配或释放时都手动与调试器交互,因此需要将命令放入脚本中,让 GDB 作为参数执行该脚本,无需任何手动干预。以下是脚本的示例以及典型的输出,并对脚本进行一些解释。

GDB 脚本 (gdbcmd1)

set pagination off
set breakpoint pending on
set logging file gdbcmd1.out
set logging on
hbreak malloc
commands
set $mallocsize = (unsigned long long) $rdi
continue
end
hbreak *(malloc+191)
commands
printf "malloc(%ld)=0x%016lx\n",$mall
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值