[Содержание]   [Назад]   [Пред]   [Вверх]   [След]   [Вперед]  


B. Ошибки и как о них сообщать

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

Чтобы дать нам возможность исправить ошибку, вы должны описать ее. Чтобы сделать это эффективно, вы должны знать, когда и как это делать.

10.8 Куда посылать сообщения об ошибках

Посылайте сообщения об ошибках DDD по электронной почте на адрес bug-ddd@gnu.org

10.9 Это ошибка DDD?

Перед отправкой сообщения попытайтесь выяснить, действительно ли причина ошибки исходит от DDD. Часто ошибки возникают из-за неполной или отсутствующей установки X или Motif, например, или из-за ошибок X-сервера или Motif. Если запустить DDD как $ ddd --check-configuration

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

Другой потенциальный источник проблем -- подчиненный отладчик; в них тоже время от времени встречаются ошибки. Чтобы выяснить, не происходит ли ошибка по вине подчиненного отладчика, запустите DDD так: $ ddd --trace

При этом в процессе работы DDD диалог между ним и подчиненным отладчиком показывается на стандартом потоке ошибок. (Если --trace не задан, диалог записывается в файл `~/.ddd/log'; раздел 10.12.1 Запись протокола.) Сравните вывод отладчика с выводом DDD и решите, кто из них неправ.

10.10 Как сообщать об ошибках

Вот несколько советов по составлению отчетов об ошибках:

10.11 Что включить в сообщение об ошибке

Чтобы мы смогли исправить ошибку DDD, вы должны включить следующую информацию:

Обязательно включайте эту информацию в каждое сообщение об ошибке.

10.12 Получение диагностики

10.12.1 Запись протокола

Если что-то ломается, первый и самый важный источник информации -- это файл протокола DDD. В этом файле, создаваемом в `~/.ddd/log' (`~' обозначает ваш начальный каталог), записывается следующая информация:

Эта информация, собранная в одном файле, дает вам (и любому сопроводителю DDD) первое впечатление о том, что может идти не так.

10.12.1.1 Выключение протокола

Создаваемые DDD протокольные файлы могут достигать больших объемов, так что вам, возможно, захочется выключить ведение протокола. В DDD нет явного средства для этого. Однако, вы можете легко создать символьную ссылку с `~/.ddd/log' на `/dev/null', чтобы протокольная информация исчезала. Введите в подсказке оболочки следующие команды: $ cd $ rm .ddd/log $ ln -s /dev/null .ddd/log

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

10.12.2 Отладка DDD

Если DDD скомпилирован с ключом -g (см. раздел 4.1 Компиляция для отладки), вы можете вызвать для него отладчик -- даже сам DDD, если хотите. В DDD есть особое меню `Maintenance', которое вызывает GDB для работающего процесса DDD. См. раздел 3.1.9 Меню Menu, для получения подробностей.

В дистрибутиве DDD поставляется файл `.gdbinit', с помощью которым можно отлаживать DDD. Помимо прочего, в нем определяются команды `ddd', которая подготавливает среду для отладки DDD, и `string', которая позволяет печатать содержимое строковых переменных DDD; просто используйте `print пер' и затем `string'.

Вы можете в любое время заставить DDD сбросить дамп памяти, послав ему сигнал SIGUSR1. DDD продолжает работу, а вы можете исследовать файл с дампом в GDB.

При отладке DDD бывает полезно сделать так, чтобы DDD не отлавливал фатальные ошибки. Этого можно достигнуть, выставив перед запуском DDD переменную среды DDD_NO_SIGNAL_HANDLERS.

10.12.3 Настройка диагностики

Вы можете использовать перечисленные ниже дополнительные ресурсы для получения диагностики DDD. Большая их часть связана с ключами командной строки.

Ресурс: appDefaultsVersion (класс Version)
Версия файла ресурсов по умолчанию. Если эта строка не соответствует версии текущего исполняемого файла DDD, выдается предупреждение.

Ресурс: checkConfiguration (класс CheckConfiguration)
Если это `on', проверить среду DDD (в частности, конфигурацию X Windows), сообщить обо всех возможных причинах проблем и выйти. См. раздел 2.1.2 Ключи DDD, описание ключа --check-configuration.

Ресурс: dddinitVersion (класс Version)
Версия исполняемого файла DDD, который последним записал файл `~/.ddd/init'. Если эта строка не соответствует версии текущего исполняемого файла DDD, выдается предупреждение.

Ресурс: debugCoreDumps (класс DebugCoreDumps)
Если это `on', при получении фатального сигнала DDD вызывает отладчик для самого себя. См. раздел 3.1.9 Меню Menu, как установить этот ресурс.

Ресурс: dumpCore (класс DumpCore)
Если это `on' (по умолчанию), при получении фатального сигнала DDD сбрасывает дамп памяти. См. раздел 3.1.9 Меню Menu, как установить этот ресурс.

Ресурс: maintenance (класс Maintenance)
Если это `on', включается меню верхнего уровня `Maintenance' (см. раздел 3.1.9 Меню Menu) с дополнительными функциями. См. раздел 2.1.2 Ключи DDD, описание ключа --maintenance.

Ресурс: showConfiguration (класс ShowConfiguration)
Если это `on', напечатать на стандартный вывод конфигурацию DDD и выйти. См. раздел 2.1.2 Ключи DDD, описание ключа --configuration.

Ресурс: showFonts (класс ShowFonts)
Если это `on', напечатать на стандартный вывод определения шрифтов DDD и выйти. См. раздел 2.1.2 Ключи DDD, описание ключа --fonts.

Ресурс: showInvocation (класс ShowInvocation)
Если это `on', напечатать на стандартный вывод ключи командной строки DDD и выйти. См. раздел 2.1.2 Ключи DDD, описание ключа --help.

Ресурс: showLicense (класс ShowLicense)
Если это `on', напечатать на стандартный вывод лицензию DDD и выйти. См. раздел 2.1.2 Ключи DDD, описание ключа --license.

Ресурс: showManual (класс ShowManual)
Если это `on', напечатать на стандартный вывод страницу man для DDD и выйти. Если стандартный вывод является терминалом, страница показывается в программе постраничного просмотра ($PAGER, less или more). См. раздел 2.1.2 Ключи DDD, описание ключа --manual.

Ресурс: showNews (класс ShowNews)
Если это `on', напечатать на стандартный вывод новости DDD и выйти. См. раздел 2.1.2 Ключи DDD, описание ключа --news.

Ресурс: showVersion (класс ShowVersion)
Если это `on', напечатать на стандартный вывод версию DDD и выйти. См. раздел 2.1.2 Ключи DDD, описание ключа --version.

Ресурс: suppressWarnings (класс SuppressWarnings)
Если это `on', предупреждения X Windows подавляются. Это иногда бывает полезно для исполняемых файлов, собранных на машине с другой конфигурацией X или Motif. По умолчанию `off'. См. раздел 2.1.6 Предупреждения X Windows, для дополнительной информации.

Ресурс: trace (класс Trace)
Если это `on', печатать диалог между DDD и подчиненным отладчиком на стандартный вывод. По умолчанию `off'. См. раздел 2.1.2 Ключи DDD, описание ключа --trace.


[Содержание]   [Назад]   [Пред]   [Вверх]   [След]   [Вперед]