Время от времени вы будете сталкиваться с ошибками в DDD. Хотя мы не
можем обещать, что можем или будем исправлять их, и возможно, мы даже не
согласимся, что это ошибка, но мы все равно хотим услышать об ошибках, с
которыми вы столкнулись, на случай, если мы действительно захотим их
исправить.
Чтобы дать нам возможность исправить ошибку, вы должны описать ее.
Чтобы сделать это эффективно, вы должны знать, когда и как это делать.
Перед отправкой сообщения попытайтесь выяснить, действительно ли причина
ошибки исходит от 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.
Если это `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.