При разработке программ, особенно в первое время, возможны ошибки как синтаксические, так и логические. Чем сложнее программа, тем труднее их обнаружить. Дня облегчения обнаружения и устранения ошибок в среде разработки Borland C++Builder 6 существует встроенный отладчик программ. Он позволяет выполнять программу по шагам, устанавливать точки останова, просматривать переменные и т. п.
Несмотря на то, что созданные нами программы очень просты, я намеренно хочу рассказать об отладке программ. Дело в том, что рано или поздно в создаваемой программе могут появиться ошибки: или синтаксические, или более сложные для обнаружения логические ошибки. И тогда потребуется инструмент для их устранения. Чем быстрее мы познакомимся с таким инструментом, тем легче нам будет создавать более сложные программы.
После разработки любого приложения необходимо выполнить его компиляцию, компоновку и тестирование. Эти операции выполняются автоматически каждый раз при выполнении команды Run из главного меню среды разработки Borland C++ Builder 6. Однако данные процедуры можно выполнять по отдельности с целью сокращения времени на отладку всего проекта в целом.
Лекция 9: Основы отладки и оптимизации приложений
В нашем очередном примере мы будем пользоваться различными командами трансляции (компиляции и компоновки) проекта. Рассмотрим, в чем состоит отличие между этими командами. Например, компиляцию отдельного модуля программы можно выполнить с помощью команды главного меню Project Compile. При этом не будет затрачено время на компиляцию и компоновку всего проекта в целом.
Команда главного меню Project Make позволяет выполнить компиляцию только тех модулей, которые были отредактированы, после чего выполняет компоновку проекта с созданием исполняемого модуля с расширением ехе. Таким образом, эта команда также экономит время на трансляцию проекта в целом.
И только команда Project Build компилирует все модули независимо от того, редактировались они или нет. А затем компонует проект и готовит исполняемый файл с расширением ехе. Данная команда необходима для переработки всего проекта после изменения настроек компилятора или среды разработки в целом. Команда Project Run в отличие от Project Build автоматически запускает исполняемый файл.
На этапе компиляции происходит автоматический поиск синтаксических ошибок, неправильного объявления или использования переменных и т. п. При обнаружении подобных ошибок в инспекторе кодов будет выведено соответствующее сообщение об ошибке или предупреждение. Предупреждение в отличие от ошибки не блокирует выполнение программы, но не гарантирует корректность ее работы. Если ошибок в программе нет, компилятор создает объектный (машинный) код программы в модулях (файлах) с расширением obj.
При компоновке программы также выявляются некоторые виды ошибок, связанные с отсутствием объявления переменных, функций, библиотек и т. п., и выполняется объединение всех объектных модулей и библиотек при необходимости в один исполняемый файл с расширением ехе. Вместо исполняемого файла может создаваться библиотечный файл с расширением lib или dll при соответствующих установках среды разработки.
Профессиональная отладка программ | Ведение логов | Сообщения об ошибках в программе | debug
Рассмотрим выполнение описанных процедур на конкретном примере. Создадим небольшое приложение на форме Form1 с двумя кнопками Button1, Button2 и одним элементом надписи Label1. О том, как размешаются эти элементы на форме, рассказывалось в главе 7. Это приложение должно сообщать нам о количестве нажатий на первую кнопку.
При нажатии на вторую кнопку приложение должно закрываться. Разместите эти элементы на форме Form1 и измените размер формы в соответствии с рис. 13.1.
Рис. 13.1. Внешний вид формы Form1
Теперь замените свойство Caption всех объектов приложения в инспекторе объектов на заголовки Программа 2, Кнопка 1, Выход и пустую строку соответственно. В результате у вас должно получиться окно, показанное на рис. 13.2. Обратите внимание, что элемент Label1, располагающийся выше кнопок, не виден, поскольку мы изменили его свойство Caption на пустую строку, то есть очистили это свойство.
Рис. 13.2. Внешний вид измененной формы Form1
Щелкните дважды левой кнопкой мыши по созданной кнопке Выход и в отрывшемся окне инспектора кодов впишите между фигурными скобками заготовки обработчика события, команду закрытия приложения close () ;. Вернитесь к окну формы и щелкните дважды левой кнопкой мыши по кнопке с названием Кнопка 1. В отрывшемся окне инспектора кодов впишите между фигурными скобками следующую строку:
Label1->Caption= «Kнonкa 1 нажата » + IntToStr(++i) + » раз» ;
В этой строке команд выполняется присвоение (знак «равно») свойству Caption , элемента надписи Label1 , текстовой строчки, состоящей из трех слагаемых частей. Поскольку свойство Caption элемента надписи Label1 предназначено для отображения текста, мы должны присваивать этому свойству только текстовые (строковые) значения. В языке C++ такие строковые значения заключаются в кавычки.
Первая и последняя части присваиваемого значения таковыми и являются. Счетчиком количества нажатий на кнопку в программе будет служить переменная ±, которая должна автоматически увеличиваться на единицу перед выводом. Для этой цели перед ней записаны два знака -. Данная операция в языке C++ называется автоинкрементом. Для превращения числовой переменной i в строковую переменную используется встроенная функция C++ преобразования целых чисел в строки intToStr() . Итак в одной строке команд мы осуществили целый ряд операций. Разве это не изящный язык программирования?!
Сохраните проект под именем butct.bpr , а программный модуль под именем Ubutct.cpp . Впрочем, имена вы можете дать любые другие. Не допускается лишь использование в этих именах русских букв. И не изменяйте расширения файлов.
Теперь попробуем скомпилировать, скомпоновать и выполнить данное приложение, а заодно проверить, нет ли в нем ошибок. Выполните команду Compile из группы Project главного меню или нажмите комбинацию клавиш для компиляции программы +. Перед вами откроется окно, приведенное на рис. 13.3.
Рис. 13.3. Окно компиляции программы
В верхней строке этого окна отображается путь размещения и имя проекта программы. В следующей строке вначале отображается процесс компиляции, сменяющийся записью Done, говорящей о завершении данной операции, и сообщением об обнаруженных ошибках There are errors (Здесь есть ошибки).
Ниже отображается номер текущей строки программы Current line и общее количество строк программы Total lines. В нижней строке отображается обнаруженное на данный момент число замечаний Hints, предупреждений Warnings и ошибок Errors. Как видим, в программе есть одна ошибка. Нажмите кнопку ОК — и перед вами окажется окно инспектора кода с выделенной строкой, имеющей ошибку, и сообщением о типе ошибки (рис. 13.4).
Рис. 13.4. Окно инспектора кода
Строка [C++ Error] Ubutct.pp(29): E2451 Undefined symbol ‘i’ сообщает о том, что компилятор C++ обнаружил ошибку в 29-й строке модуля Ubutct.cpp. Код ошибки Е2451 означает, что обнаружен необъявленный символ. В нашем случае это переменная с именем i . Действительно, мы не объявили ее в программе, хотя и сделали это намеренно, с целью получения сообщения об ошибке в качестве примера.
В языке C++, как впрочем и в других языках программирования, все переменные, используемые в программе, необходимо объявлять. Это делается для того, чтобы компилятор знал, сколько ячеек памяти необходимо резервировать в памяти компьютера для ее хранения.
Поскольку различные типы переменных требуют для своего хранения различное количество ячеек памяти (байт), рационально резервировать для них лишь необходимый объем памяти. В нашем случае переменная i является целой, то есть принимающей только целочисленные значения. Для ее объявления необходимо использовать директиву int (от integer, целый).
Можно сделать такое объявление непосредственно в тексте программы обработчика событий, но тогда эта переменная будет недоступна в других функциях обработчика. Поэтому мы объявим ее в блоке public файла описания заголовков Ubutct.h. Для этого необходимо щелкнуть левой кнопкой мыши по вкладке Ubutct.h инспектора кодов и вписать строку объявления переменной с комментариями сразу же после строчки public . Ниже, в листинге 12.1, эта запись приведена полностью.
Листинг 12.1. Строки объявления переменной i
public: // User declarations
int i; // Переменная — счетчик
Теперь снова выполним компиляцию и обнаружим, что ошибок нет. Но не спешите радоваться. Дело в том, что мы не присвоили переменной i начального значения. Компилятор не обращает на это внимания и не выдает никаких сообщений по этому поводу. Но в программе это может привести к недоразумениям.
Поэтому выполним присвоение начального значения переменой i , сделав запись i=0; (ведь при запуске программы Кнопка 1 не была нажата ни разу) в тексте программы обработчика создания формы. Для этого щелкните дважды левой кнопкой мыши по форме приложения и в открывшемся окне инспектора кода впишите между фигурными скобками текста программы строку i=0;.
Выполним компоновку проекта с помощью команды Make из группы Project главного меню или нажав комбинацию клавиш для компоновки программы +. В результате мы должны получить безошибочную компоновку приложения. Теперь приложение можно сохранить и запустить на выполнение с помощью команды Run или воспользоваться горячей кнопкой запуска программы .
На экране появится окно нашей программы. Щелкая левой кнопкой мыши по кнопке с названием Кнопка 1, вы увидите, что каждый раз в окне будет появляться сообщение о количестве нажатий этой кнопки.
Источник: radio-hobby.org
ОПИСАНИЕ ПРОЦЕССА ОТЛАДКИ
Программа, представленная в виде инструкций языка программирования, называется исходной программой. Она состоит из инструкций, понятных человеку, но не понятных процессору компьютера. Чтобы процессор смог выполнить работу в соответствии с инструкциями исходной программы, эта программа должна быть переведена на машинный язык — язык команд процессора. Задачу преобразования исходной программы в машинный код выполняет специальная программа — компилятор.
Компилятор выполняет последовательно две задачи:
1. Проверяет текст исходной программы на отсутствие синтаксических ошибок.
2. Создает (генерирует) исполняемую программу — машинный код.
Генерация машинного кода компилятором свидетельствует лишь о том, что в тексте программы нет синтаксических ошибок. Убедиться, что программа работает правильно можно только в процессе ее тестирования — пробных запусках программы и анализе полученных результатов [1].
Процесс и результат компиляции отражаются в диалоговом окне Compiling. В это окно компилятор выводит ошибки (Errors), предупреждений (warnings) и подсказок (Hints). Сами сообщения об ошибках, предупреждения и подсказки отображаются в нижней части окна редактора кода.
В большинстве случаев в только что набранной программе есть синтаксические ошибки. Программист должен их устранить. Процесс устранения ошибок носит итерационный характер. Обычно сначала устраняются наиболее очевидные ошибки, например, декларируются необъявленные переменные. После очередного внесения изменений в текст программы выполняется повторная компиляция.
Следует учитывать тот факт, что компилятор не всегда может точно локализовать ошибку. Поэтому, анализируя фрагмент программы, который, по мнению компилятора, содержит ошибку, нужно обращать внимание не только на тот фрагмент кода, на который компилятор установил курсор, но и на тот, который находится в предыдущей строке [1].
Если в программе нет синтаксических ошибок, компилятор создает исполняемый файл программы. Имя исполняемого файла такое же, как и у файла проекта, а расширение — exe. Delphi помещает исполняемый файл в тот же каталог, где находится файл проекта.
При обнаружении в программе неточностей, которые не являются ошибками, компилятор выводит подсказки (Hints) и предупреждения (warnings). Например, наиболее часто выводимой подсказкой является сообщение об объявленной, но не используемой переменной.
Итак, компиляция — это перевод исходного текста к виду, доступному для вычислительной машины, и объединение в одно целое отдельных частей программы. В результате компиляции будет получена программа, находящаяся либо в оперативной памяти машины, либо размещённая в exe — файле на диске [1].
Тестирование и отладка программы
Успешное завершение процесса компиляции не означает, что в программе нет ошибок. Убедиться, что программа работает правильно можно только в процессе проверки ее работоспособности, который называется тестированием.
Обычно программа редко сразу начинает работать так, как надо, или работает правильно только на некотором ограниченном наборе исходных данных. Это свидетельствует о том, что в программе есть алгоритмические ошибки. Процесс поиска и устранение ошибок называется отладкой [2].
Интегрированная среда разработки Delphi предоставляет программисту мощное средство поиска и устранения ошибок в программе — отладчик. Отладчик позволяет:
выполнять трассировку программы;
наблюдать значения переменных;
устанавливать точки остановки;
отслеживать происходящие события;
выполнять программу в пошаговом режиме.
Именно это средство и использовалось при отладке данной программы. Этап отладки можно считать законченным, если программа правильно работает на одном — двух наборах входных данных [1].
Выполнение и контрольный пример
Во время выполнения программы можно столкнуться с множеством проблем. Они могут возникнуть как на этапе проектирования, так и на этапе разработки программного продукта. Основной проблемой является неправильное использование операторов языка, неверное построение алгоритма. Ошибки могут быть разными, как это может быть и некорректное использование свойств компонент, или неправильное задание какого-либо условия, так и многое другое [2].
Но они все легко устраняемы, после того, как проект готов к работе проводятся автономная и комплексная отладка программного продукта, испытание работоспособности модулей и базовых программных средств. Для комплексной отладки готовится контрольный пример, который позволяет проверить соответствие возможностей программного продукта заданным спецификациям.
В результате тестирования программы были выявлены следующие ошибки:
ошибка соединения клиентского приложения с серверным;
ошибка при сохранении новой записи в таблице, нарушение целостности первичного ключа;
ошибка при редактировании данных;
некорректное отображение данных при выборе участка или при выборе другой таблицы;
некорректный вывод записей за определенный промежуток времени при формировании отчета.
В настоящее время все ошибки устранены. Результат работы программы представлен в приложении 2 (стр. 78).
Источник: studentopedia.ru
Отладка программы
На этапе отладки в соответствие с алгоритмом проверяется правильность функционирования как отдельных фрагментов кода, так и программы в целом. Но даже успешное завершение отладки еще не является гарантией того, что программа будет работать правильно со всеми возможными исходными данными.
Поэтому нужно обязательно провести тестирование программы, то есть проверить ее работу на «пограничных» и заведомо некорректных исходных данных. Для этого составляются тесты. Вполне возможно, что результаты тестирования не удовлетворят разработчика программы. В этом случае ему придется вносить поправки в код программы, то есть возвращаться к первому шагу процесса разработки (см, рис, 6.1).
Специфика программ на ассемблере состоит в том, что они интенсивно работают с аппаратными ресурсами компьютера. Это обстоятельство заставляет программиста постоянно отслеживать содержимое определенных регистров и областей памяти. Естественно, что человеку трудно следить за этой информацией с большой степенью детализации. Поэтому для локализации логических ошибок в программах используют специальный тип программного обеспечения — программные отладчики.
Отладчики бывают двух типов:
— интегрированные отладчики, реализованные в виде интегрированной среды, напоминающие среду для языков высокого уровня (TurboPascal, Visual C++ и т. д.);
— автономные отладчики, представляющие собой отдельные программы.
Ни один из рассматриваемых нами ассемблеров (MASM, TASM) не имеет своей интегрированной среды, поэтому для отладки написанных на языке ассемблера программ используют либо автономные отладчики, либо отладчики некоторой среды программирования (например, Visual C++). С помощью автономного отладчика можно исследовать работу любой программы, для которой создан исполняемый модуль, независимо от того, на каком языке был написан его исходный текст. Для учебных целей ни один из этих подходов не приемлем, так как требует знаний, которыми начинающий программировать на ассемблере, скорее всего, еще не обладает.
ПРИМЕЧАНИЕ Почему в учебнике много программ для MS-DOS? Ведь времена массового использования этой операционной системы давно прошли. На сегодняшний день у ЭТОЙ ОС остался один, но очень важный аспект ее применения — методический.
Опыт показывает, что при обучении любому языку программирования, в том числе ассемблеру, на первом месте должен быть сам язык, а не программные средства поддержки процесса программирования на нем. В этом контексте отметим два момента.
Во-первых, начинающему изучать ассемблер легче объяснить принципы построении и работы ассемблерных программ в среде реального режима (MS-DOS), чем защищенного (Windows). По мере накопления практического опыта и теоретических знаний с целью их наращивания можно переходить к работе с более сложными приложениями, в том числе и для операционной системы Windows. Во-вторых, для большинства изучающих язык ассемблера его освоение является промежуточным этапом на пути к реализации некоторой большей задачи. Поэтому подавляющее большинство глав данного учебника посвящено рассмотрению различных групп команд ассемблера, для детального изучения которых вполне достаточно среды реального режима(MS-DOS).
Пакеты TASM и MASM имеют достаточно эффективные инструменты разработкн программ для среды MS-DOS, работу с которыми вполне по силам освоить даже начинающему программисту. Конечно, сейчас мало кто пишет программы для среды MS-DOS, поэтому работу с 16-разрядными инструментами пакетов TASM и MASM нужно рассматривать как часть методики обучения.
Аналогичные суждения относятся и к средствам отладки. В этой книге для программ TASM реального режима будет использоваться 16-разрядный отладчик Turbo Debugger (TD), разработанный фирмой Borland International. Это наиболее удачный отладчик для ассемблерных программ реального режима. Принципиально важно, что работа с TD прививает навыки, которые наверняка окажутся полезными при работе с другими отладчиками, например с отладчиком cv.exe из пакета MASM.
Отладчик TD представляет собой оконную среду отладки программ на уровне исходного ассемблерного текста. Он позволяет решить две главные задачи:
— определить место логической ошибки;
— определить причину логической ошибки.
Перечислим некоторые возможности TD:
— трассировка программы в прямом направлении, то есть последовательное выполнение программы, при котором за один шаг выполняется одна машинная инструкция;
— трассировка программы в обратном направлении, то есть выполнение программы по одной команде за один шаг, но в обратном направлении;
— просмотр и изменение состояния аппаратных ресурсов процессора во время трассировки.
Эти действия позволяют определить место и источник ошибки в программе. Нужно сразу оговориться, что TD не позволяет вносить исправления в исходный текст программы. Однако после определения причины ошибочкой ситуации можно, не завершая работу отладчика, внести исправления прямо в машинный код и снова запустить программу. Поскольку после завершения работы отладчика эти изменения не сохраняются, на практике подобное прямое внесение изменений в код не применяют. Изменения вносят в исходный текст программы, заново создают загрузочный модуль, который снова загружают в отладчик.
Правильная организация процесса получения исполняемого модуля, пригодного для отладки на уровне исходного текста, рассмотрена ранее. Далее перечислены ключевые моменты этого процесса.
В исходной программе обязательно должна быть определена метка для первой команды, с которой начнется выполнение программы. Такая метка может быть собственно меткой или, как видно из листинга 6.1, именем процедуры. Имя этой Метки обязательно должно быть указано в конце программы в качестве операнда директивы END:
end имя_метки
В нашем случае эта метка является именем процедуры MAIN.
Исходный модуль должен быть оттранслирован с ключом /zi:
tasm /zi имя_исходного_модуля.
Ключ /zi разрешает транслятору сохранить связь символических имен в программе с их смещениями в сегменте кода, что позволяет отладчику выполнять отладку, используя оригинальные имена.
Редактирование модуля должно быть осуществлено с ключом /v:
Tlink /v имя_объектного_модуля
Ключ /vуказывает на необходимость сохранения отладочной информации и исполняемом файле.
Запуск отладчика удобнее производить из командной строки с указанием исполняемого модуля отлаживаемой программы:
td_имя_исполняемого_модуля
Кстати, сам файл отладчика td.exe логично также поместить в наш рабочий каталог..WORK. Изначально файлы отладчика находятся в каталоге..BIN пакета TASM. Если все же файл td.exe и файл исполняемого модуля при запуске будут находиться в разных каталогах, то в командной строке необходимо указать путь к этому модулю, например:
При правильном выполнении перечисленных действии откроется окно отладчика TD под названием Module с исходным текстом программы prg_6_l.asm. Как он здесь оказался, ведь в командной строке для программы td.exe было указано только имя исполняемого модуля? Это как раз и есть результат действия ключей /zi и /v для tasm и tlink соответственно. Их применение позволило сохранить, информацию об использовавшихся в коде на ассемблере символических именах. Для полноты эксперимента можно попытаться получить исполняемый модуль без задания этих ключей и проанализировать результат.
Вернемся к окну Module (рис. 6.2). Внимание следует обратить на так называемый курсор выполнения (в виде треугольника). Он указывает на первую команду, подлежащую выполнению. Этой команде предшествует имя метки (в нашем случае роль метки выполняет имя процедуры).
Это так называемая точка входа в программу. Если внимательно посмотреть на конец исходного текста программы, то видно, что это же имя записано в качестве операнда в заключительной директиве END. Это единственный способ сообщить загрузчику ОС о том, где в исходном тексте программы расположена точка входа в нее. В более сложных программах обычно вначале могут идти описания процедур, макрокоманд, и в этом случае без такого явного указания на первую исполняемую команду просто не обойтись.
Основную часть главного окна отладчика обычно занимают одно или несколько дополнительных окон. В каждый момент времени активным может быть только одно из них. Активизация любого окна производится щелчком мышью в любой его видимой точке.
Управление работой отладчика ведется с помощью системы меню. Имеются
два тина таких меню:
— главное меню — находится в верхней части экрана и доступно постоянно (вызов меню осуществляется нажатием клавиши F10, после чего следует выбрать нужный пункт меню);
— контекстное меню — для каждого окна отладчика можно вызвать его собственное меню, которое учитывает особенности этого окна, щелкнув в окне правой кнопкой мыши (либо активизировав окно и нажав клавиши Alt+F10). Теперь можно проверить правильность функционирования нашей программы. Специфика программ на ассемблере состоит в том, что делать выводы о правильности их функционирования можно, только отслеживая работу на уровне процессора. При этом нас будет интересовать прежде всего то, как программа использует процессор и изменяет состояние его ресурсов и компьютера в целом. Запустить программу в отладчике можно в одном из четырех режимов:
— выполнения по шагам;
— выполнения до текущего положения курсора;
— выполнения с установкой точек прерывания.
Рассмотрим эти режимы подробнее.
Режим безусловного выполнения программы целесообразно применять, когда требуется посмотреть на общее поведение программы. Для запуска программы в этом режиме необходимо нажать клавишу F9. В точках, где необходимо ввести Данные, отладчик, в соответствии с логикой работы применяемого средства ввода, будет осуществлять определенные действия.
Аналогичные действия отладчик выполнит при выводе данных. Для просмотра или ввода этой информации можно открыть окно пользователя (выбрав в меню команду Window►User screen или на-жав клавиши Alt+F5). Если программа работает правильно, то на этом отладку можно и закончить. В случае, если возникают какие-то проблемы или нужно более детально изучить работу программы, применяются три следующих режима отладки.
Режим выполнения программы до текущего положения курсора целесообразно использовать в том случае, если интерес представляет только правильность функционирования некоторого участка программы. Для активизации этого режима необходимо установить курсор на нужную строку программы и нажать клавишу F4. Программа запустится и остановится на отмеченной команде, не выполнив ее. Далее при необходимости вы можете перейти в пошаговый режим.
В режиме выполнения программы с установкой точек прерывания программа после запуска будет останавливаться в строго определенных точках прерывания (breakpoints). Перед выполнением программы необходимо установить эти точки в программе, для чего следует перейти к нужной строке и нажать клавишу F2. Выбранные строки подсвечиваются.
Установленные ранее точки прерывания можно убрать — для этого нужно повторно перейти к нужной строке и нажать клавиш F2. После установки точек прерывания программа запускается клавишей F9 (см. ранее режим безусловного выполнения). На первой точке прерывания программа остановится. После этого можно посмотреть состояние процессора и памяти, а затем продолжить выполнение программы. Сделать это можно в пошаговом режиме или до следующей точки прерывания.
Режим выполнения программы по шагам применяется для детального изучения ее работы. В этом режиме выполнение программы прерывается на каждой машинной (ассемблерной) команде. При этом становится возможным наблюдение за результатом исполнения команд. Для активизации этого режима нужно нажать клавишуF7 (Run ►Trace into) илиF8 (Run ►Step over).
Обе эти клавиши активизируют пошаговый режим; различие их проявляется в том случае, когда в потоке команд встречаются команды перехода в процедуру или на прерывание. При нажатии клавиши F7 отладчик осуществит переход к процедуре или прерыванию и остановится. Если же нажимается клавиша F8, то вызов процедуры или прерывания отрабатывается как одна команда, и управление передается следующей команде программы. Здесь нужно отметить, что кроме окна Module при работе вэтом режиме полезно использовать окно CPU, вызвать которое можно через главное меню командой View►CPU.
Окно CPUотражает состояние процессора и состоит из пяти подчиненных окон.
— В окне с исходной программой в дизассемблированном виде представлена та же самая программа, что и в окне Module, но уже в машинных кодах. Пошаговую отладку можно производить прямо в этом окне; строка с текущей командой подсвечивается.
-В окне регистров процессора (Registers) отражается текущее содержимое регистров (по умолчанию — только регистров процессора i8086). Чтобы увидеть регистры i486 или Pentium, нужно задать режим их отображения. Для этого щелкните правой кнопкой мыши в области окна регистров и выберите в контекстном меню команду Registers 32-bit — Yes.
— В окне флагов (Flags) отражается текущее состояние флагов процессора в соответствии с их мнемоническими названиями.
— В окне стека (Stack) отражается содержимое памяти, выделенной для стека. Адрес области стека определяется содержимым регистров SS и SP.
— Окно дампа оперативной памяти (Dump) отражает содержимое области памяти по адресу, который формируется из компонентов, указанных в левой части окна. В окне можно увидеть содержимое произвольной области памяти. Для этого нужно в контекстном меню выбрать нужную команду.
Заметим, что окно CPU, по сути, отражает видимую часть программной модели процессора. Некоторые из подчиненных окон окна CPU можно вывести на экран отдельно. Хотя удобнее работать с исходным текстом в окне Module, чем с его дизассемблированным вариантом в окне CPU, часто есть необходимость отслеживать состояние процессора с помощью подчиненных окон окна CPU. Совместить возможности окон Module и CPU можно, выбрав в меню View имена нужных подчиненных окон окна CPU.
Прервать выполнение программы в любом из режимов можно, нажав клавиши Ctrl+F2.
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru