Jump to content

Development/Tutorials/Debugging/How to create useful crash reports (ru)

From KDE TechBase

Введение

В этой статье описано, как создать полезный отчет с трассировкой упавшего приложения KDE. Сначала приведем общую информацию. Затем мы опишем несколько способов трассировки с помощью полезных отладчиков GNU Debugger и Valgrind.

Как создать полезный crash report (отчет об упавшем приложении)

Хороший отчет об упавшем приложении в Bugzilla состоит из двух частей: описание того, как воспроизвести краш приложения и трассировка этого краша. Если один из этих элементов отсутствует, то разработчикам гораздо сложнее решить проблему.

Описание должно состоять больше, чем из просто "оно рухнуло". Попытайтесь описать все, что Вы делали до того, как приложение упало. Нажали ли Вы на кнопку, открыли ли какой-то вебсайт или файл, что привело к проблеме? Эти мелкие детали могут выглядеть бесполезными для Вас, но быть полезными для разработчиков, поэтому просто опишите их.

Более серьезные статьи по тому, как писать хорошие описания ошибок, доступны по этой ссылке. Пожалуйста, прочитайте их до того, как посылать отчеты об ошибках.

Не прикладывайте трассировку к отчету об ошибке. Вместо этого просто вставьте ее. Это лучше, поскольку у разработчиков появляется возможность поиска отчетов-дубликатов. (Приложенные файлы с трассировками не будут найдены.)

Если Вы вставите трассировку в отчет, убедитесь, что Вы вырезали все, кроме одной-двух,

(no debugging symbols found)

строки из трассировки, так как они затрудняют чтение.

Хотя вставка трассировки напрямую предпочтительнее, чем прикрепление файла, пожалуйста, не вставляйте в отчет логи (valgrind, strace или вывод терминала) или примеры данных (почта, HTML файлы и т.д.). Прикрепляйте такие вещи как файлы.

Трассировка

Трассировка необходима. Она может выглядеть бессмысленной для Вас, но она может содержать много полезной информации. Трассировка описывает, какие функции были вызваны до краша, так что разработчики могут выяснить, в какой из них началась неразбериха. Хорошая трассировка имеет и обратную сторону: библиотеки и исполняемые файлы занимают больше дискового пространства, чем их оптимизированные "братья". Поэтому во многих дистрибутивах установлены укороченные (обрезанные) файлы, которые приводят к бесполезным трассировкам:

(no debugging symbols found)
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[Thread debugging using libthread_db enabled]
[New Thread -1233848624 (LWP 12212)]
[New Thread -1255081072 (LWP 12820)]
[New Thread -1240921200 (LWP 12819)]
[New Thread -1266680944 (LWP 12818)]
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
0xffffe410 in __kernel_vsyscall ()
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0
#2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6
#3  0x00000003 in ?? ()
#4  0x082149c0 in ?? ()
#5  0x00003ffc in ?? ()
#6  0x00000000 in ?? ()

Но не волнуйтесь, с помощью некоторых модификаций Вы можете создать полный вывод трассировки для приложений KDE.

Подготовка пакетов KDE

Если Ваш дистрибутив имеет пакеты для отладки, то установите их.

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

#6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4

?? обозначают, что библиотека libkmailprivate.so.4 не имеет отладочной информации, которая могла бы быть доступна в отдельном пакете для отладки. В этом случае, легко решить, что Вам необходимо установить пакет для отладки KMail, чтобы получить лучший вывод трассировки.

Иногда Вам необходимо установить более, чем один, пакет для отладки, чтобы получить хорошую трассировку. Это зависит от Вашего дистрибутива. Например, в некоторых дистрибутивах достаточно установить пакет отладки для kdepim, чтобы получить достаточную отладочную информацию для крашей в KMail, в других дистрибутивах необходим дополнительный отладочный пакет именно для KMail.

Далее приводится список, из которого можно узнать, как получить пакеты отладки для некоторых дистрибутивов:

  • Debian - Debian предлагает -dbg пакеты для легкого создания полезных трассировок. Просто установите требующиеся -dbg пакеты. Например, kdepim-dbg для крашей KMail. Зависимости -dbg нужны для того, чтобы быть уверенными в наличии соответствующих пакетов (kdelibs-dbg, gdb, и т.д.).
  • FreeBSD ports - Пожалуйста, последуйте по ссылке KDE на FreeBSD FAQ.
  • Gentoo - Gentoo имеет свой собственный документ, описывающий данную проблему.
  • Mandriva - Mandriva 2007.0 и выше имеет дополнительные отладочные пакеты для всего KDE (фактически для всех его пакетов). Просто установите соответствующие -debug пакеты такие, как kdebase-debug и kdemultimedia-debug. Вы вероятно захотите установить kdelibs-debug в любом случае.
    • Примечание: -debug пакеты находятся в отдельных репозиториях. Например, для всех пакетов в main, Вы найдете отладочные пакеты в репозитории debug_main.
  • Kubuntu/Ubuntu - Семейство Ubuntu дистрибутивов делает вещи довольно простыми. Каждый официальный модуль KDE имеет в репозитории отдельный пакет с суффиксом -dbg. Всегда устанавливайте kdelibs5-dbg, потому что все приложения KDE используют kdelibs (kdelibs-dbg для приложений KDE 3). Затем Вам следует установить -dbg пакет для упавшего приложения. Например, если упал KOrganizer, Вам следует, конечно же, установить kdepim-dbg. Если программа не из официального модуля KDE и не имеет -dbg пакета, то Вы можете установить -dbgsym пакетиз репозиториев, приведенных на этой Debugging Program Crashes странице.
  • openSUSE - Вам следует установить -debuginfo пакеты, например: kdepimlibs4-debuginfo. Вы можете найти эти пакеты в KDE репозиториях. Также есть отдельная страница, посвященная отладке в openSUSE.
  • Fedora - Fedora имеет свой собственный документ, описывающий данную проблему. (debuginfo репозиторий должен быть разрешенным.)

Если Ваш дистрибутив не имеет отладочных пакетов для KDE, Вам следует скомпилировать KDE из исходников:

  • Если Вы используете KDE 3, тогда на стадии конфигурации следует использовать параметр --enable-debug=full, чтобы собрать отладочные символы.
  • Если Вы используете KDE 4, то на стадии cmake следует использовать параметр -DCMAKE_BUILD_TYPE=debugfull. Если Вы желаете определить свой собственный CXXFLAGS, то используйте -DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS="-O0 -g". Вы можете можете изменить CMAKE_CXX_FLAGS так, как Вам нужно.

Затем просто вызываете make и make install, как Вы всегда делаете.

Crash!

Итак, время "уронить" Ваше приложение. The KDE Crash Dialog should appear right after the crash, which shows the Backtrace tab.