0

我最近发现了一个 Windows 调试工具PageHeap。它的选项/fault允许每隔一段时间注入内存分配失败。就像,我希望每 100 或 1000 次分配失败,你决定。我们在linux上有类似的东西吗?

我可以想到 ulimit,但这不是一回事,一旦达到内存,它会使每个后续分配失败,而不仅仅是一个。

4

2 回答 2

1

你应该可以自己写。看看:Malloc Hooks

于 2014-02-19T10:49:08.700 回答
1

LD_PRELOAD是的,您可以使用;做类似的事情。您需要编译如下内容:

#include <dlcfn.h>

void *malloc(size_t size) {
  static unsigned count = 0;
  static void *(*real_malloc)(size_t) = NULL;

  if (!real_malloc)
    real_malloc = dlsym(RTLD_NEXT, "malloc");

  if (++count == 100) {
    count = 0;
    return NULL;
  }

  return real_malloc (size);
}

作为共享对象,例如

gcc -shared -ldl -fPIC my_malloc.c -o libmy_malloc.so

一旦你这样做了,你可以像这样运行你的程序:

LD_PRELOAD=/path/to/libmy_malloc.so ./my_program

它会调用替换malloc()例程。

我想上面的预构建版本具有比这更多的调试功能,但你明白了。

哦,对了,上面的代码没有经过测试(用 Stack Overflow 写的)。它也不是线程安全的,如果替换 malloc(),您需要是线程安全的,因此您需要使用pthread_once(),以及pthread_mutex修复该问题的 API。

于 2014-02-19T10:50:35.540 回答