Загрузка отлаживаемой программы
- Запустить SL.
- Выбрать опцию Open module в меню File.
- Открыть Gdidemo.exe.
- Выбрать опцию Load в меню Module.
SL оттранслирует отладочную информацию в .NMS файл, загрузит исходные файлы, запустит отлаживаемую программу (в данном случае Gdidemo) и всплывет в SoftIce, где вы увидите исходный текст программы.
Подсвеченная строка с номером 35 - это точка входа (entry point) в вашу программу. Если SL вывел сообщение типа "An error occured during symbol translation/load", значит в отлаживаемом файле отсутствует отладочная информация, жмите OK и наслаждайтесь [диз]ассемблером.
2. Управление SoftIce'ом
Если все сделано правильно, то вы должны увидеть SoftIce разбитый на несколько окон. Верхнее окно - Register Window (окно регистров) - показывает состояние рабочих регистров процессора. Под ним находится окно данных Data Window, в нем вы можете посмотреть или отредактировать дамп памяти. Ниже находится Code Window (окно кода) - в нем находится исходный текст программы (если вы загрузили отладочную информацию), или дизассемблированный код программы. В самом низу находится окно команд - Command Window, в нем вы можете вводить команду и видеть результат их выполнения. Самая нижняя строчка - строка помощи, в ней при вводе подсвечиваются возможные варианты команд и их синтаксис. Удобнее всего управлять SoftIce с помощью мышки.
Изменение размера окна - подведите курсор к нижней границе того окна, которому хотите изменить размер или закрыть его, нажмите левую кнопку мыши и ведите ее вниз (увеличение размера) или вниз (уменьшение размера), если хотите закрыть окно, подведите нижнюю границу к верхней, в окне появится фраза Close current window и окно исчезнет.
Примечание: нельзя изменить размер окна регистров и FPU.
Скроллинг на одну строку - подведите курсор к маленьким стрелочкам, расположенным у границ того окна, которое хотите скроллировать и жмите левую кнопку мыши (стрелочки появляются, если размер окна больше или равен двум строчкам).
Скроллинг на экран - подведите курсор к большим стрелочкам расположенным внутри того окна, которое хотите скроллировать и жмите левую кнопку мыши (стрелочки появляются, если размер окна больше или равен четырем строчкам).
Изменение значений регистров - подведите курсор к тому регистру, значение которого хотите изменить, нажмите левую кнопку мыши и введите число, если нужно изменить одну цифру, то подводите курсор к этой цифре и меняйте.
Изменение значений флагов - подведите курсор к тому флагу, который хотите изменить, нажмите левую кнопку мыши, после чего клавишей Ins можно изменить значение флага на противоположное (маленькая буква означает, что флаг не установлен, большая установлен).
Изменение значений ячеек памяти - подведите курсор к тому байту (слову, двойному слову и т.д.), которое хотите изменить, нажмите левую кнопку мыши и вводите ваше значение, если хотите изменить одну или несколько цифр в числе, то подведите курсор с помощью клавиатуры к нужным числам и меняйте.
Примечание: во всех случаях изменения значений они вступают в силу после того, как вы переключитесь в любое другое окно, до этого можно отменить последнее изменение, нажав Esc.
Установка точек останова на исполнение - подведите курсор к той строке в Code Window, в которой хотите остановиться, и двойным щелчком по левой кнопке мыши поставьте точку останова, строка подсветится.
Удаление из Watch Window переменных - установите курсор на переменную, которую хотите удалить, нажмите левую кнопку мыши, переменная подсветиться, нажмите кнопку Del - переменная исчезнет.
Контекстное меню - по правой кнопке мыши вы попадаете в контекстное меню, в котором вам доступны команды:
- Copy - копировать в буфер обмена адрес или данные, находящиеся под курсором.
- Paste - вставить в окно команд, адрес или данные, находящиеся в буфере обмена.
- Copy&Paste - копировать в буфер обмена адрес или данные, находящиеся под курсором, и вставить их в окно команд.
- Display - вывести в окно данных дамп памяти, расположенный по адресу, над которым в данный момент находиться курсор (Аналог команды D).
- Un-Assemble - вывести в Code Window исходный (если есть отладочная информация) или дизассемблированный текст программы, находящийся по адресу, над которым в данный момент находиться курсор (Аналог команды U).
- What - идентифицирует значение, находящееся под курсором с заранее определенными (Аналог команды Wath).
- Previous - отменяет предыдущую команду, введенную из контекстного меню (работает с командами Display и Un-Assemble).
Трассировка программы
Воспользуйтесь командой T (trace) для того чтобы оттрассировать одну команду, или клавишей F8, которая закреплена по умолчанию за командой T. Произойдет выполнение команды находящейся в текущей строке и курсор перейдет на следующую строку и подсветит ее. Это строка:
LpszLine=LpszLine;Еще раз нажмите F8, курсор передвинется на следующую строку:
if(!hPrevInst).В Code Window вы видите исходный текст программы (source mode). Если вы хотите посмотреть дизассемблированный (code mode) текст программы или исходный и дизассемблированный (mixed mode) текст вместе, воспользуйтесь командой SRC или клавишей F3 закрепленной за этой командой. При первом нажатии вы увидите смешанный (исходный текст программы и ассемблерные инструкции, из которых состоит эта строка) текст, при втором нажатии дизассемблированный, третье нажатие вернет вас в режим просмотра исходного текста программы.
Нажмите еще раз F8 и вы перейдете к строке
if(!RegisterAppClass(hInst));Для того, что бы отлаживать программу вы пользуетесь командой Т, которая исполняет один оператор исходной программы или одну машинную команду.
Еще существует команда P или клавиша F10, которая выполняет один шаг в программе т.е. при трассировке какой-либо функции или прерывания, вы не получите управление до тех пор пока выполнение функции не завершится и вы не вернетесь из функции обратно. Команду P удобно применять в том случае, когда вы отлаживаете основной алгоритм и отвлекаться на трассировку каждой процедуры нерационально.
Примечание: командой T нельзя оттрассировать системные вызовы (WIN32 API calls) находясь в source mode, для их трассировки нужно перейти в mixed или code mode.