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

Просто заставьте его работать с небольшими сценариями удара. Распечатайте размер и имя файла, если это - каталог, добавляет запаздывающая наклонная черта.

du -ab | while IFS=$'\t' read -r size line; do printf "%s\t%s" $size "$line"; [[ -d $line ]] && printf "/"; echo; done

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

12
22.01.2014, 23:22
4 ответа

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

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

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

13
27.01.2020, 19:55
  • 1
    Для чего нужно посмотреть в /var/log? Какой файл журнала? Есть ли некоторая конвенция? –  Jim 22.01.2014, 23:53
  • 2
    Если можно заставить катастрофический отказ произойти, действительно так, затем посмотрите, какой файл под/var/log был последний раз изменен. С ls -lart, последний файл в списке был последний раз изменен. –  Devon_C_Miller 23.01.2014, 00:36
  • 3
    Существуют конвенции - Linux намного более неоднороден, чем окна. Системный журнал относится к системному регистратору, но нет универсальной реализации, и изменения могут затем быть настроены по-разному. Общая логика - то, что сообщения отправляются в системный журнал приложением, и эти сообщения затем отсортированы в различные файлы. Как упомянуто, обычно все заканчивается в /var/log/syslog, но различные дистрибутивы делают вещи по-другому. Если Вы знаете то, что, какой системный журнал Вы используете, можно исследовать его конфигурацию для определения этого. –  goldilocks 23.01.2014, 00:57

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

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

После того, как segfaснилась, в /var/log/kern.log была эта строка:

a.out[534]: segfault at 0 ip 08048432 sp bfaec8c0 error 6 in a.out[8048000+1000]
6
27.01.2020, 19:55

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

1
27.01.2020, 19:55

Запуск демона exec только в командной строке, вместо того, чтобы быть переданным systemd, тогда вы получите полную информацию о стеке сбоя из стандартного вывода при воспроизведении сбоя. Это сэкономит много времени на слепое добавление журнала трассировки повсюду.

0
16.09.2020, 20:26

Теги

Похожие вопросы