c++内存泄漏检测工具valgrind和drmemory

c++内存泄漏检测工具

我发现drmemory在windows环境检测c++内存泄漏好像有点不准确,windows环境总感觉差点意思,以后打算转到linux环境了

Linux: valgrind

  • 安装valgrind
sudo apt install valgrind
  • 生成可执行文件示例,注意需要添加-g参数
g++ -g leak.cpp -o leak
  • 使用valgrind检测
valgrind --leak-check=full ./your_program

windows: drmemory(配合使用vs编译套件)

安装:Download (drmemory.org),安装zip版本,解压添加bin到环境变量

image-20240811005955868

使用:drmemory.exe [options] – ,待检测的可执行程序需要在Debug模式下

  • -light: 默认关闭,开启后只检测验证错误的轻量级模式;
  • -brief: 默认关闭,开启后显示简化且易于阅读的错误报告;
  • -visual_studio: 默认关闭,开启后直接在终端上显示报告,不会主动打开results.txt文件
 drmemory -visual_studio -- .\DrMemory.exe

其他常用参数

  • -leaks_only:

    • 用途: 只检测内存泄漏。

    • 用法

      drmemory -leaks_only -- your_program
      
  • -show_reachable:

    • 用途: 在报告中显示程序结束时仍然可达(reachable)的内存块。

    • 用法

      drmemory -show_reachable -- your_program
      
  • -no_count_leaks:

    • 用途: 禁止统计内存泄漏。

    • 用法

      drmemory -no_count_leaks -- your_program
      
  • -ignore_malloc_leaks:

    • 用途: 忽略由 malloc 分配但未释放的内存。

    • 用法

      drmemory -ignore_malloc_leaks -- your_program
      
  • -light:

    • 用途: 轻量级模式,减少检查以提高性能。

      drmemory -light -- your_program
      
  • -heavy:

    • 用途: 启用更全面的检查,可能会降低性能,但能够捕获更多的内存错误。

    • 用法

      drmemory -heavy -- your_program
      
  • -dr_ops:

    • 用途: 传递给 DynamoRIO 的附加选项。

    • 用法

      drmemory -dr_ops "-disable_traces" -- your_program
      
  • -report_max:

    • 用途: 限制报告中显示的错误数量,默认是 10 个。

    • 用法

      drmemory -report_max 20 -- your_program
      
  • -logdir:

    • 用途: 指定日志文件的输出目录。

    • 用法

      drmemory -logdir ./logs -- your_program
      
  • -nudge_kills:

    • 用途: 允许 Dr. Memory 在程序被终止时生成报告。默认是 on

    • 用法

      drmemory -nudge_kills off -- your_program
      
  • -callstack:

    • 用途: 调整报告中的调用栈深度,默认为 10 层。

    • 用法

      drmemory -callstack 15 -- your_program
      
  • -exit_code_if_errors:

    • 用途: 如果检测到错误,返回指定的退出代码。

    • 用法

      drmemory -exit_code_if_errors 1 -- your_program
      
  • -no_results_to_stderr:

    • 用途: 不将结果输出到标准错误输出。

    • 用法

      drmemory -no_results_to_stderr -- your_program
      

3. 运行 Dr. Memory 并输出到指定目录

drmemory -logdir ./drmemory_logs -- your_program

这将生成日志文件并将其存储在指定的 ./drmemory_logs 目录中。

4. 结合其他工具使用

你可以结合参数使用,比如在轻量模式下,只检测内存泄漏,并将输出保存到指定目录:

bash
复制代码
drmemory -leaks_only -light -logdir ./drmemory_logs -- your_program
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值