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


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, вы должны включить следующую информацию:

  • Вашу конфигурацию DDD. Чтобы получить эту информацию, вызовите DDD как
    $ ddd --configuration
    
    Если это не сработает, пожалуйста, напишите по крайней мере версию DDD, тип вашей машины, а также имя и номер версии операционной системы.
  • Какой отладчик вы используете, и его версию (например, `gdb-4.17' или `dbx, поставляемый с Solaris 2.6').
  • Какой компилятор вы использовали для сборки DDD, и его версию (например, `gcc-2.8.1').
  • Описание поведения, которое вы наблюдали и сочли неправильным. Например, "DDD получает фатальный сигнал" или "DDD завершается сразу после попытки создать окно данных".
  • Файл протокола, показывающий диалог между DDD и подчиненным отладчиком. По умолчанию этот диалог сохраняется в файле `~/.ddd/log'. Включите весь трассировочный вывод начиная от запуска DDD до первого появления ошибки; где необходимо, вставьте свои комментарии.
  • Если вы хотите предложить изменения исходного кода DDD, пошлите нам контекстные заплаты. Даже если вы обсуждаете что-то в исходном коде DDD, ссылайтесь по контексту, не по номеру строки.

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

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

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

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

  • Ваша конфигурация DDD (наверху).
  • Все программы, вызываемые из DDD; они записываются в форме `$ программа аргументы...'.
  • Все сообщения DDD, записываются в форме `# сообщение'.
  • Вся информация, которую DDD посылает подчиненному отладчику; в форме -> текст.
  • Вся информация, посылаемая в DDD со стандартного вывода подчиненного отладчика; записывается в форме `<- текст'.
  • Вся информация, посылаемая в DDD со стандартного потока ошибок подчиненного отладчика; записывается в форме `<= текст'.(34)
  • Вся информация, посылаемая из DDD в Gnuplot, в форме `>> текст'.
  • Вся информация, посылаемая в DDD со стандартного вывода Gnuplot; записывается в форме `<< текст'.
  • Вся информация, посылаемая в DDD со стандартного потока ошибок Gnuplot; записывается в форме `<= текст'.
  • Если DDD завершился аварийно, в конец дописывается полученный от GDB след вызовов дампа памяти DDD.

Эта информация, собранная в одном файле, дает вам (и любому сопроводителю 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.


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

Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости