Как мы можем отследить проблемы сбоев программ в Linux?

12

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

Джим
источник
2
Стандартный способ отладки такого рода вещей - запуск проблемного приложения из терминала вручную. Таким образом, вы можете увидеть любые сообщения об ошибках.
Тердон
2
64-разрядные версии Linux будут регистрировать краткое описание сбойного процесса (тот, который умер из-за сигнала) в /var/log/syslog. Linux позволяет демону получать уведомления о сбоях процессов. Убунту Apport и Red Hat, ABRT использовать это , чтобы обеспечить централизованное ведение журнала и генерации отчетов объектов. Обычно дамп ядра сохраняется, чтобы вы могли вызвать отладчик в аварийной программе.
Марк Плотник
Я бы проголосовал за этот вопрос, но ФП, похоже, не хочет помогать сообществу, принимая или публикуя ответ, поэтому я найду аналогичный вопрос, который действительно принимает ответ и высказывает его, в надежде, что он подняться на вершину результатов поиска и помочь будущим поисковикам
Mawg говорит восстановить Monica

Ответы:

13

Например, есть ли центральный журнал или что-то подобное?

Нормальное место для системных логов есть /var/log/. То, что помещается в каждый журнал, зависит от конфигурации системного журнала, но обычно все, кроме имен входа, отправляется /var/log/syslog.

Это не является гарантией того, что отдельные приложения оставили какие-либо подсказки в случае возникновения проблемы. Но они или оболочка, скорее всего, будут выплевывать что-то в стандартные потоки ошибок out / standard, и если вы запустите проблемное приложение на переднем плане из терминала, вы сможете увидеть это.

лютик золотистый
источник
Что нужно искать в /var/log? Какой файл журнала? Есть ли соглашение?
Джим
2
Если вы можете вызвать сбой, сделайте это, а затем посмотрите, какой файл в / var / log был недавно изменен. С ls -lart, последний файл в списке был наиболее недавно изменился.
Devon_C_Miller
Есть соглашение s - linux гораздо более разнороден, чем windows. Системный журнал относится к системному журналу, но универсальной реализации не существует, и тогда вариации можно настраивать по-разному. Общая логика заключается в том, что сообщения отправляются в системный журнал приложением, а затем эти сообщения сортируются в разные файлы. Как уже упоминалось, обычно все заканчивается /var/log/syslog, но разные дистрибутивы делают вещи по-разному. Если вы знаете, какой системный журнал вы используете, вы можете проверить его конфигурацию, чтобы определить это.
Златовласка
6

На Ubuntu segfaults пишут в /var/log/kern.log. Я проверил это, создав программу, которая segfaults:

void main() {
    int *a=0;
    *a=0;
}

После того, как это произошло, была эта строка в /var/log/kern.log:

a.out[534]: segfault at 0 ip 08048432 sp bfaec8c0 error 6 in a.out[8048000+1000]
sashoalm
источник
1

В Ubuntu, если вы запускаете приложение из файла запуска .desktop, добавьте эту опцию Terminal=trueв свой файл .desktop.

Села
источник