2010-10-16 2 views
17

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

ulimit -c unlimited 

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

Почему файл дампа ядра не генерируется автоматически и почему мне нужно каждый раз запускать команду ulimit, чтобы сгенерировать основной файл при следующем запуске моей программы?.

Операционная система i Ubuntu 10.10.

ответ

18

Вы должны поместить команду

ulimit -c unlimited 

в параметрах среды.

Если вы используете Баш в качестве оболочки, вам необходимо поместить вышеупомянутую команду в ~/.bashrc

9

Это потому, что по умолчанию ваш дистрибутив ограничивает размер файла ядра до 0 блоков. Вы упомянули команду ulimit, которая увеличивает ее до бесконечности.

Я не знаю о Ubuntu, но у большинства дистрибутивов есть файл/etc/limits с системными значениями по умолчанию для ограничений ресурсов.

15

Вы также можете попытаться изменить /etc/security/limits.conf файл вместо добавления ulimit -c unlimited к ~/.bashrc.

limits.conf - это «правильное» место, где можно указать основные данные дампа в большинстве дистрибутивов Linux.

1

Ошибка сегментации обусловлена ​​несущественными значениями для переменных пути. В моей системе пользователь: [email protected], а содержание - ниже.

PATH=$PATH:/home/sidd/ns-allinone-2.35/bin:/home/sidd/ns-allinone-2.35/tcl8.5.10/unix:/home/sidd/ns-allinone-2.35/tk8.5.10/unix 

LD_LIBRARY_PATH=/home/sidd/ns-allinone-2.35/otcl-1.14:/home/sidd/ns-allinone-2.35/lib 

TCL_LIBRARY=/home/sidd/ns-allinone-2.35/tcl8.5.10/library 

Пожалуйста, обратитесь this blog post (ОЧЕНЬ ВАЖНО).