Понимание выхода электрического забора и GDB - PullRequest
8 голосов
/ 16 ноября 2010

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

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

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

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

Спасибо!

Ответы [ 2 ]

14 голосов
/ 31 декабря 2012

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

echo 128000 > /proc/sys/vm/max_map_count

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

vm.max_map_count = 128000

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

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

4 голосов
/ 16 ноября 2010

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

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

Если вы работаете в Linux, попробуйте вместо этого Valgrind.

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

...