Как создать случайный сбой выделения памяти?

Я недавно обнаружил PageHeap, средство отладки Windows. Его вариант / неисправности позволяет вводить сбой выделения памяти время от времени. Мол, я хочу, чтобы 1 выделение провалилось каждые 100 или 1000, вы решаете. Есть ли у нас что-то похожее на Linux?

Я могу думать об ulimit, но это не совсем то же самое, он будет вызывать сбои при каждом последующем выделении памяти, как только будет достигнута память, а не только одна.

0

Решение

Да, вы можете делать подобные вещи, используя 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() рутина.

Я предполагаю, что есть предварительно скомпилированные версии выше с более широкими возможностями отладки, но вы поняли идею.

О, и кстати, приведенный выше код не проверен (написано в Переполнение стека). Это также не безопасно, а также Вы должны быть в безопасности потока если заменить malloc (), то вы захотите использовать pthread_once()и pthread_mutex API, чтобы исправить это.

1

Другие решения

Вы должны быть в состоянии написать свой собственный. Взгляни на: Маллок Хукс.

1

По вопросам рекламы [email protected]