当前位置:  开发笔记 > 编程语言 > 正文

每当调用malloc/free时输出到stderr

如何解决《每当调用malloc/free时输出到stderr》经验,为你挑选了2个好方法。

使用Linux/GCC/C++,我想在调用malloc/free/new/delete时向stderr记录一些内容.我正在尝试理解库的内存分配,因此我想在运行单元测试时生成此输出.我使用valgrind进行内存泄漏检测,但我找不到一个选项来使它只是日志分配.

有任何想法吗?我正在寻找最简单的解决方案.不能重新编译库.



1> Robert Gambl..:

您可以使用ltrace跟踪对malloc/free的调用:

#include 

int main (void)
{
  void *ptr = malloc(10);
  free(ptr);

  return 0;
}


$ g++ test.cpp -o test
$ ltrace -e malloc,free ./test
malloc(10)                                       = 0x804a008
free(0x804a008)                                  = 
+++ exited (status 0) +++

要在不重新编译的情况下跟踪新的/删除调用,您可能需要使用类似LD_PRELOAD的内容来覆盖使用您自己的版本的调用,这正是LeakTracer可以执行您想要的操作.



2> Emerick Rogu..:

本文(向下滚动到底部)提供了如何在C++中覆盖全局newdelete运算符的非常清晰和简洁的描述(请注意,它没有提供示例new[],但它在概念上类似).

至于重写malloc和free,因为你正在使用Linux和GCC,最简单的方法是使用malloc_hookfree_hook. 以下是对这些功能如何工作的非常好的描述.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有