Некоторые установки GDB крайне важны для корректной работы DDD. Вот эти установки и их правильные значения:
set height 0 set width 0 set verbose off set prompt (gdb)
DDD автоматически устанавливает эти значения при вызове GDB; если их изменить, возможны неполадки, особенно в отображении данных.
При отладке на уровне машинного кода с применением в качестве подчиненного отладчика GDB 4.12 или более раннего используйте команду `display /x $pc', чтобы гарантировать обновление значения счетчика инструкций при каждом останове программы. Можно также написать эту команду в `~/.gdbinit' или (даже лучше) поставить последнюю версию GDB.
Когда DDD используется для отладки паскалеобразных программ, он не делает правильных предположений о способе индексации массивов и всегда начинает считать с единицы.
С некоторыми версиями DBX (в частности, с Solaris DBX) для правильной интерпретации вывода DBX DDD удаляет из него комментарии в стиле Си и Си++. Это также относится к выводу отлаживаемой программы, когда он посылается на консоль отладчика. Этих проблем можно избежать, используя отдельное окно выполнения.
В некоторых версиях DBX (а именно, DEC DBX и AIX DBX) нет автоматического отображения данных. В качестве альтернативы, DDD использует для доступа к данным команду DBX `print'. Это означает, что имена переменных интерпретируются в соответствии с текущим фреймом; переменные вне текущего фрейма не могут отображаться.
Все ограничения DBX (см. раздел 10.14 Использование DDD с DBX) существуют и в Ladebug.
В XDB нет автоматического отображения данных. Чтобы обойти это, DDD использует для доступа к данным команду `p'. Это означает, что имена переменных интерпретируются в соответствии с текущим фреймом; переменные вне текущего фрейма не могут отображаться.
В JDB нет автоматического отображения данных. Чтобы обойти это, DDD использует для доступа к данным команду `dump'. Это означает, что имена переменных интерпретируются в соответствии с текущим фреймом; переменные вне текущего фрейма не могут отображаться.
Команды JDB `dump' и `print' не поддерживают вычисления выражений. Следовательно, вы не можете отображать произвольные выражения.
Разбор вывода JDB требует довольно много процессорного времени из-за
распознавания асинхронных подсказок (любая нить может в любое время
что-то напечатать, в том числе подсказки). Поэтому программа, которая
много выводит на консоль, скорее всего сильно замедлит работу DDD. В
этом случае запустите программу с ключом -debug
в отдельном
окне и подсоедините к ней JDB с помощью ключа -passwd
.
В Perl нет автоматического отображения данных. Чтобы обойти это, DDD использует для доступа к данным команду `x'. Это означает, что имена переменных интерпретируются в соответствии с текущим фреймом; переменные вне текущего фрейма не могут отображаться.
В DDD включены несколько хаков, позволяющих запускать DDD с LessTif, свободным клоном Motif, без потери функциональности. Поскольку двоичный файл DDD может быть динамически скомпонован и использован как с библиотекой OSF/Motif, так и с LessTif, эти хаки для Lesstif можно включать и выключать на время выполнения.
Включены ли хаки для Lesstif во время выполнения или нет, зависит от установки ресурса `lessTifVersion':
79
обозначает LessTif 0.79, а 1005
обозначает LessTif 1.5.
Если значение этого ресурса меньше 1000, что указывает на LessTif 0.99 или более ранний, DDD задействует зависящие от версии хаки, чтобы обойти ошибки и недостатки LessTif.
Если DDD был скомпонован с LessTif, по умолчанию принимается значение
макроса `LessTifVersion' из файла `<Xm/Xm.h>'. Если DDD
скомпонован с OSF/Motif, по умолчанию принимается 1000
, что
выключает все специфичные для LessTif хаки.
Чтобы установить ресурс `lessTifVersion' во время запуска DDD и
указать номер версии библиотеки LessTif, вы можете также использовать
ключ --lesstif-version
версия.
Принимаемое по умолчанию значение ресурса `lessTifVersion'
определяется библиотекой LessTif, с которой DDD был скомпонован (или
это 1000
, при компиляции с OSF/Motif). Поэтому вам обычно не
нужно беспокоиться о значении этого ресурса. Однако, если вы
используете динамически скомпонованный двоичный файл DDD не с той
библиотекой, с которой его компилировали, вы должны указать номер версии
этой библиотеки используя этот ресурс. (К сожалению, DDD не может
определять это во время выполнения.)
Вот некоторые сценарии для иллюстрации этой схемы:
--lesstif-version 88
.
--lesstif-version 1000
.
--lesstif-version 90
.
Чтобы выяснить, с какой версией LessTif или OSF/Motif был скомпилирован
DDD, вызовите его с ключом --configuration
.
В исходном коде DDD специфичные для LessTif хаки контролируются строкой `lesstif_version'.