| |
Иногда желательно исследовать программу не только на уровне исходного текста, но и на уровне машинного кода. DDD предоставляет для этой задачи специальные окна машинного кода и регистров.
Чтобы включить поддержку отладки на уровне машинного кода, выберите `Source => Display Machine Code'. Когда она включена, появляется дополнительное окно машинного кода, которое показывает код текущей функции.(31) Перемещая квадратик в правой части разделяющей линии между окном исходника и машинного кода, вы можете изменять размер этих окон.
Окно машинного кода работает во многом похоже на окно исходника. Вы можете устанавливать, сбрасывать или изменять точки останова, выбирая адрес и нажимая кнопки `Break' или `Clear'; также доступны обычные всплывающие меню. Точки останова и текущая выполняемая позиция отображаются одновременно и в окне исходного кода, и в окне машинного кода.
Кнопку `Lookup' можно применять для поиска машинного кода конкретной функции или функции по конкретному адресу. Просто щелкните на нужной позиции в одном окне и нажмите `Lookup', и увидите соответствующий код в другом окне.
Если исходный код недоступен, обновляется только окно машинного кода.
Вы можете настраивать различные аспекты окна дизассемблированного вывода. См. раздел 8.4 Настройка окна машинного кода, для получения подробностей.
Все средства, доступные в окне исходного кода, также доступны в окне машинного кода. Для отладки на уровне машинного кода удобны две особые возможности:
Чтобы выполнить ровно одну машинную инструкцию, щелкните на кнопке `Stepi' или выберите `Program => Step Instruction'.
Чтобы продолжить до следующей инструкции в текущей функции, щелкните на кнопке `Nexti' или выберите `Program => Next Instruction'. Это похоже на `Stepi', но все вызовы подпрограмм выполняются без остановки.
При использовании GDB часто бывает полезно делать
graph display /i $pc
во время пошагового выполнения машинных инструкций. Это велит DDD автоматически показывать, какая инструкция будет выполнена следующей, всякий раз, когда программа останавливается.
DDD предоставляет окно регистров, в котором после каждого останова программы показываются значения машинных регистров. Чтобы включить это окно, выберите `Status => Registers'.(32)
Если выбрать один из регистров, его имя скопируется в поле аргумента. Вы можете использовать его, например, в качестве значения для `Display', чтобы получить отображение его значения в окне данных.
Включение машинного кода через `Source => Display Machine Code' (см. раздел 8.1 Исследование машинного кода) переключает следующий ресурс:
--disassemble
и --no-disassemble
.
Вы можете оставить дизассемблированный код в памяти, используя `Edit => Preferences => Source => Cache Machine Code':
Вы можете изменять ширину отступа для машинного кода, используя `Edit => Preferences => Source => Machine Code Indentation':
4
.
Ресурс `maxDisassemble' говорит, какой объем кода нужно дизассемблировать. Если `maxDisassemble' равен 256 (по умолчанию), а текущая функция больше 256-ти байт, DDD дизассемблирует только первые 256 байт от текущей позиции. Вы можете установить ресурс `maxDisassemble' в большее значение, если предпочитаете более обширный обзор машинного кода.
256
).
Если значение этого ресурса равно нулю, текущая функция дизассемблируется
полностью.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |