LINUX.ORG.RU

Ubuntu и репорт при крахе программы

 , ,


1

1

Возможно тема уже была, но я её не смог найти. Какой сейчас актуальный crash-reporter есть в Ubuntu (допустим Kubuntu Ubuntu Xubuntu), пусть даже в репозиториях только.

Надо чтобы как минимум при крахе программы видеть call-stack и ещё что-нибудь, чтобы просто понимать где и что упало, в какой функции, т.е. кто из команды разработчиков виноват :)

Ответ на: комментарий от Akamanah

KDE-шное, но доступно везде? на любой редакции Ubuntu? ок, спасибо посмотрю

а консольная версия есть? будет ещё серверная часть - на ней без иксов, тоже бы хотелось видеть что упало...

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Насчет остального не знаю. Вроде как написано «Обработчик ошибок KDE».

Akamanah ★★★★★
()

apport

Crash log'и будут складываться в /var/crash

Чтобы их привести в читаемый вид, можно воспользоваться apport-unpack.

Оно сгенерит каталог с файлами

Architecture
CoreDump
Date
DistroRelease
ExecutablePath
ExecutableTimestamp
ProblemType
ProcCmdline
ProcCwd
ProcEnviron
ProcMaps
ProcStatus
Signal
Uname
UserGroups

Затем

gdb "$(<ExecutablePath)" CoreDump
(gdb) thread apply all bt

При желании всё автоматизируется.

Не так наглядно, как с drkonqi, но работает и без X.

sjinks ★★★
()
Ответ на: комментарий от DELIRIUM

всем угодил, просто не знал что так можно :)

cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c
по дефолту так, буду думать на тему GDB

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

по дефолту так, буду думать на тему GDB

Как-то так:

echo '|/path/to/gentrace.sh %p' > /proc/sys/kernel/core_pattern

gentrace.sh

#! /bin/sh

PID=$1
PROG=$(readlink /proc/$PID/exe)
/usr/bin/gdb -q "$PROG" $PID > crashlog.txt 2> /dev/null << EOF
set prompt
echo --- Stacktrace\n
where
echo --- Symbols\n
set \$x = 50
while (\$x)
info locals
up
set \$x--
end
echo ---\n
detach
quit
EOF

В реальной жизни вместо > crashlog.txt лучше писать во временный файл (man mktemp), слать лог по почте (или делать с ним что-то локально) и удалять временный файл.

Ну и команды gdb настроить под себя.

sjinks ★★★
()
Ответ на: комментарий от sjinks

написал программу с простым делением на ноль - как заставить apport срабатывать? показывать окошко? где дампы?

я пока не могу найти документацию с примером как и где смотреть обзор крэша... в /var/crash пусто, только чужие какие-то крэши старые, а мои не появляются, хотя сам apport запущен, «заэнаблен» - подскажи пожалуйста если знаешь ЧЯДНТ?

I-Love-Microsoft ★★★★★
() автор топика
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от sjinks

когда я выполняю тестовый крах при помощи bash -c 'kill -SEGV $$' то в /var/crash появляется файл, а вот когда я роняю программу делением на ноль или запрещенным доступом к памяти (на выбор :) ) - то никаких репортов не создается

вопрос: может программу надо где-то прописать и зарегистрировать в каких-то конфигах? ведь системные пакетированные оно ловит, а мои? crashdb.conf может надо как-то править?

I-Love-Microsoft ★★★★★
() автор топика

Нашел решение проблемы почему не создавались файлы с именем core - надо просто выполнить команду «ulimit -c unlimited» от текущего пользователя и проверить при помощи ulimit -a что «core file size (blocks, -c) unlimited». И при крахе программы будет создаваться файл core (который надо удалять перед запуском программы ибо видимо старые файлы не затираются). Файл core появляется в текущей папке где исполнялась программа.

Далее команда «gdb ./crashing ./core» покажет в какой функции и в какой даже строчке произошла критическая ошибка :) crashing - имя падающей программы.

В общем, я рад :)

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.