[содержание] [назад] [пред] [вверх] [след] [вперед]
время от времени вы будете сталкиваться с ошибками в 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 .
[содержание] [назад] [пред] [вверх] [след] [вперед]
|