[Содержание] [Назад] [Пред] [Вверх] [След] [Вперед]
Время от времени вы будете сталкиваться с ошибками в DDD. Хотя мы не
можем обещать, что можем или будем исправлять их, и возможно, мы даже не
согласимся, что это ошибка, но мы все равно хотим услышать об ошибках, с
которыми вы столкнулись, на случай, если мы действительно захотим их
исправить.
Чтобы дать нам возможность исправить ошибку, вы должны описать ее.
Чтобы сделать это эффективно, вы должны знать, когда и как это делать.
Посылайте сообщения об ошибках DDD по электронной почте на адрес
bug-ddd@gnu.org
Перед отправкой сообщения попытайтесь выяснить, действительно ли причина
ошибки исходит от DDD. Часто ошибки возникают из-за неполной или
отсутствующей установки X или Motif, например, или из-за ошибок
X-сервера или Motif. Если запустить DDD как
$ ddd --check-configuration
будут проверены распространенные причины проблемы, и вы получите
некоторые подсказки о том, как их можно исправить.
Другой потенциальный источник проблем -- подчиненный отладчик; в них
тоже время от времени встречаются ошибки. Чтобы выяснить, не происходит
ли ошибка по вине подчиненного отладчика, запустите DDD так:
$ ddd --trace
При этом в процессе работы DDD диалог между ним и подчиненным
отладчиком показывается на стандартом потоке ошибок. (Если
--trace
не задан, диалог записывается в файл
`~/.ddd/log'; раздел 10.12.1 Запись протокола.) Сравните вывод отладчика с
выводом DDD и решите, кто из них неправ.
Вот несколько советов по составлению отчетов об ошибках:
-
Фундаментальный принцип правильного сообщения об ошибках такой:
сообщайте все факты. Если вы не уверены, писать о каком-то
факте или не писать, пишите!
-
Помните, что цель сообщения об ошибке -- дать кому-то возможность
исправить ошибку, если она неизвестна. Что случится, если ошибка уже
известна, не так уж важно. Поэтому всегда пишите сообщения,
предполагая, что эта ошибка неизвестна.
-
Ваше сообщение должно быть самодостаточным. Не ссылайтесь на
информацию, посланную в предыдущих письмах; ваши прошлые письма могли
быть переправлены кому-то другому.
-
Пожалуйста, сообщайте о каждой ошибке в отдельном письме. Тогда нам
будет проще отследить, какие ошибки уже исправлены, и переслать ваши
сообщения соответствующему сопроводителю.
-
Пожалуйста, пишите на английском; это увеличит шансы, что найдется
кто-то способный исправить ошибку. Не думайте, что ваше сообщение
получит один конкретный человек.
Чтобы мы смогли исправить ошибку 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, ссылайтесь по контексту, не по номеру строки.
Обязательно включайте эту информацию в каждое сообщение об
ошибке.
Если что-то ломается, первый и самый важный источник информации -- это
файл протокола DDD. В этом файле, создаваемом в
`~/.ddd/log' (`~' обозначает ваш начальный каталог),
записывается следующая информация:
-
Ваша конфигурация DDD (наверху).
-
Все программы, вызываемые из DDD; они записываются в форме `$
программа аргументы...'.
-
Все сообщения DDD, записываются в форме `# сообщение'.
-
Вся информация, которую DDD посылает подчиненному отладчику; в форме
-> текст
.
-
Вся информация, посылаемая в DDD со стандартного вывода подчиненного
отладчика; записывается в форме `<- текст'.
-
Вся информация, посылаемая в DDD со стандартного потока ошибок
подчиненного отладчика; записывается в форме `<=
текст'.(34)
-
Вся информация, посылаемая из DDD в Gnuplot, в форме `>>
текст'.
-
Вся информация, посылаемая в DDD со стандартного вывода Gnuplot;
записывается в форме `<< текст'.
-
Вся информация, посылаемая в DDD со стандартного потока ошибок
Gnuplot; записывается в форме `<= текст'.
-
Если DDD завершился аварийно, в конец дописывается полученный от
GDB след вызовов дампа памяти DDD.
Эта информация, собранная в одном файле, дает вам (и любому
сопроводителю DDD) первое впечатление о том, что может идти не так.
Создаваемые DDD протокольные файлы могут достигать больших объемов,
так что вам, возможно, захочется выключить ведение протокола. В DDD
нет явного средства для этого. Однако, вы можете легко создать
символьную ссылку с `~/.ddd/log' на
`/dev/null', чтобы протокольная информация исчезала. Введите в
подсказке оболочки следующие команды:
$ cd
$ rm .ddd/log
$ ln -s /dev/null .ddd/log
Помните, однако, что если протокол не ведется, диагностика сильно
затруднена; в случае возникновения неприятностей может быть трудно
воспроизвести ошибку.
Если 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
.
Вы можете использовать перечисленные ниже дополнительные ресурсы для
получения диагностики 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
.
[Содержание] [Назад] [Пред] [Вверх] [След] [Вперед]
Используются технологии
uCoz