основной дамп не генерируется - PullRequest
1 голос
/ 24 июля 2011

Я работаю на ПК под управлением CentOS в качестве операционной системы. Я также работаю над встроенным с той же ОС.

На моем компьютере мне удалось создать файл дампа ядра при ошибке сегментации, изменив:

  1. шаблон ядра
  2. core_uses_pid
  3. ulimit -c неограничено
  4. sysctl -p

Но на встроенной системе ничего не работает - дамп ядра не генерируется! В чем может быть причина?

Если это имеет значение, приложение, которое я хотел бы получить, написано на C ++.

Что я могу сделать, чтобы получить дамп ядра во встроенной системе?


Я создал небольшую программу для аварийного завершения, и дамп ядра генерируется из программы аварийного завершения, но не для той, которая мне нужна !!! Так что проблема не в O.S, а в конкретной программе. Я обнаружил, что мы удаляем -g исполняемые / библиотечные файлы перед отправкой их в встраиваемую систему. Я сделал то же самое для моей аварийной программы, и эта по-прежнему производит дамп ядра.

Ответы [ 3 ]

4 голосов
/ 25 июля 2011

Вы уверены, что ядро ​​вашей встроенной системы поддерживает дампы ядра?Эту функцию можно отключить в сборке ядра ( ref ), в этом случае вам, возможно, придется подделать ее самостоятельно, используя что-то вроде google-coredumper .

0 голосов
/ 28 июля 2011

Хорошо,

Я сделал небольшую ошибку, когда проверил программу на своем компьютере, я проверил ее с помощью другого сигнала, чем на встроенной системе. Все еще оставалась проблема, почему для пользовательского обработчика сигналов нет дампа ядра. Решение есть в одной из ссылок:

К сожалению, если ваше приложение оснащено настраиваемым обработчиком сигналов, дамп ядра не будет создан, поскольку он генерируется только обработчиками сигналов по умолчанию. Если в вашем приложении есть собственный обработчик сигналов, отключите его перед началом отладки, иначе дамп ядра не будет сгенерирован. Некоторые источники в Интернете упоминают, что восстановление обработчика сигналов по умолчанию в обработчике сигналов после возникновения исключения и повторная отправка его в режиме обратной петли может вызвать дамп ядра. В тестах, которые я проводил, он генерировал дамп ядра, но единственное, что я увидел в дампе ядра, - это код, который выполнял мой обработчик (то есть вызовы signal и kill), так что это мне не помогло. Возможно, на других платформах этот трюк работает лучше.

На моей платформе это работает - другое решение - генерировать дамп ядра в обработчике сигналов. Я слышал, что GCore может это сделать, с Windows Core, я получил ошибку несовместимости.

0 голосов
/ 25 июля 2011

Я видел два источника возможной информации, оба из которых указывают на файл /etc/security/limits.conf:

Отключение дампов ядра Linux - Да, я знаю, что вы хотите включить дампов памяти ядра, но это может помочь в обратном направлении CentOS включает дампы ядра - Другой источник указывает на limits.conf.

...