Понимание выхода электрического забора и GDB

При отладке программы, которая заканчивается segfault, электрический забор, в сочетании с gdb, возвращает это:

"ElectricFence Exiting: mprotect() failed: Cannot allocate memory [Thread 0xb0bd4b70 (LWP 5363) exited] Program exited with code 0377.

Я действительно думал, что электрический забор будет более полезным. Что это значит? Как я могу интерпретировать эту информацию? Кажется, не осталось ни одного стека, на который я мог бы взглянуть, или, по крайней мере, bt не вернет ничего.

Любое предложение будет действительно оценено.

Спасибо!

2 ответа

Вы, вероятно, исчерпали области карты памяти. Известно, что по умолчанию используется низкий уровень при использовании отладочных распределителей. Это можно настроить во время выполнения с помощью

echo 128000 > /proc/sys/vm/max_map_count

или добавив эту строку в /etc/sysctl.conf и перезагрузившись:

vm.max_map_count = 128000

Число max_map_count по умолчанию равно 65530 и может быть увеличено до MAX_INT при необходимости.

Для получения дополнительной информации см.:

Вывод ElectricFence просто означает, что ему не хватает памяти, и он не может вам помочь.

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

Если вы используете Linux, попробуйте Valgrind.

Также обратите внимание, что ваш первый шаг для программы, которая умирает с SIGSEGV не должен запускать его с ElectricFence; скорее вы должны запустить программу под отладчиком и посмотреть, где она падает.

Другие вопросы по тегам