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

我可以想到ulimit,但这不是完全相同的事情,一旦到达内存,它将使所有后续分配失败,而不仅仅是一个。

最佳答案

是的,您可以使用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进行修复。

关于c++ - 如何创建随机内存分配失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21878083/

10-12 20:27