Как происходит отладка программ

В MetaEditor встроен отладчик — инструмент, который позволяет проверить работу программы по шагам (по отдельным функциям). Вы расставляете в коде программы точки останова — места, в которых исполнение программы должно быть приостановлено. Затем запускаете программу на обычном графике или в тестере стратегий. Как только исполнение программы дойдет до точки останова, оно будет прервано. Вы сможете посмотреть значения вычисленных переменных, а затем продолжить исполнение программы вручную по шагам, проверяя алгоритм работы.

  • Предварительная настройка
  • Точки останова
  • Запуск отладки
  • Наблюдаемые выражения
  • Просмотр стека вызовов
  • Пошаговая отладка
  • Приостановка, возобновление и завершение отладки
  • Отладка на истории

Предварительная настройка #

Перед началом отладки задайте ее общие параметры в настройках MetaEditor. Вы можете указать символ и период графика, на котором будет происходить отладка приложений. Такой график будет временно создаваться каждый раз при начале отладке и удаляться сразу после ее завершения.

Пошаговая отладка программ с выводом переменных | О самом простом | Program DEBUG

К графику, создаваемому для отладки, применяется шаблон «debug.tpl», расположенный в папке /profiles/templates торговой платформы.

Точки останова #

Точка останова — это команда, срабатывающая при переходе исполнения программы к указанной строке, и останавливающая ее выполнение в этом месте. Точки останова позволяют исследовать поведение программы в указанном участке кода: просмотреть значения переменных, стек функций. В дальнейшем процесс отладки может быть возобновлен или прекращен.

Перед запуском отладки установите хотя бы одну точку останова в коде программы. Для этого дважды щелкните мышью на сером поле слева от строки с кодом. Также вы можете установить курсор в строку и нажать » Переключить точку останова» в меню «Отладка» или «F9». Выключение точек останова происходит таким же образом.

Включенная точка останова

Чтобы быстро перейти к точке, в которой остановлено исполнение программы, дважды нажмите на функцию в окне просмотра стека вызовов. Также через контекстное меню этого окна можно перейти к просмотру списка всех точек останова в отлаживаемой программе:

Переход к точке останова

К любой из точек также можно перейти двойным кликом на ней.

Запуск отладки #

Для запуска отладки откройте основной файл программы или проект. Отладку можно производить в двух режимах:

  • На реальных данных. Запускается командой » Начать на реальных данных» в меню «Отладка» или клавишей «F5». В этом режиме отлаживаемая программа запускается на специальном графике в торговой платформе. Отладка осуществляется в реальных условиях на ценовых данных, поступающих от сервера.
  • На исторических данных. Запускается командой » Начать на исторических данных» в меню «Отладка» или клавишами «Ctrl+F5». В этом режиме программа запускается в тестере стратегий. Он позволяет проверить работу на любом интересующем участке истории, не дожидаясь наступления определенных рыночных условий. По умолчанию используется режим невизуального тестирования, чтобы не тратить ресурсы на отрисовку графических элементов. При необходимости вы можете включить визуальный режим в настройках MetaEditor.

Урок 16 (часть 1): Отладка программ с помощью дебагера

Как только исполнение программы в режиме отладки дойдет до строки с точкой останова, оно будет прервано. Строка, на которой остановилось выполнение, будет помечена иконкой . Также в окне «Инструменты» появится вкладка «Отладка». В левой ее части будет показан стек вызова функции.

Срабатывание точки остановка после запуска отладки

Наблюдаемые выражения #

В процессе отладки можно отслеживать значения различных выражений (переменных), получаемых на текущем этапе исполнения программы. Для этого предназначена правая часть вкладки «Отладка» окна «Инструменты». Чтобы отслеживать значения выражения, добавьте его в наблюдаемые:

  • Во время отладки установите курсор на выражение в исходном коде и нажмите » Добавить наблюдение» в контекстном меню.
  • Нажмите » Добавить» в контекстном меню правой части вкладки «Отладка». Далее введите имя выражения в появившейся строке.
  • Чтобы изменить название отслеживаемого выражения, дважды нажмите на него мышью.

Просмотр стека и значений выражений

Вы также можете включить автоматическое отображение локальных переменных в списке наблюдения. Для этого выберите опцию «Локальные» в контекстном меню. Во время отладки по мере перехода по коду в список будут автоматически выводиться переменные из текущей области видимости.

В окне наблюдения за выражениями можно выполнять простые математические вычисления (сложение, вычитание, умножение и деление), а также просматривать значения в конкретных точках массива, например, указав запись A[3][4], где A — это название массива, а 3 и 4 — это позиции в его измерениях. При добавлении объектов в наблюдаемые выражения можно показать список их членов, указав в конце точку или нажав клавиши «Ctrl+Space»:

Подстановка членов объектов

Для просмотра содержимого массива или объекта дважды нажмите на него в окне наблюдения.

По умолчанию, целые числа отображаются в окне наблюдения в десятичном виде. Чтобы вывести значение в двоичном или шестнадцатеричном виде, в поле «Выражение» укажите через запятую модификатор b или x соответственно.

Просмотр выражений в двоичном и шестнадцатеричном виде

Просмотр стека вызовов #

В стек вызовов заносится информация для возврата управления из подпрограмм (вложенных функций) в программу (основной обработчик события OnInit, OnTick и т.д.). В стеке вы можете посмотреть весь путь от возникновения события в торговой платформе до вызова конкретной функции.

Для каждой функции отображается следующая информация:

  • Название файла, из которого была вызвана функция.
  • Название функции.
  • Номер строки в файле, где эта функция была вызвана.

Для пошаговой отладки с просмотром стека вызовов используются команды меню «Отладка» или панели инструментов «Стандартная»:

  • Шаг с заходом — пройти один шаг выполнения программы с заходом в вызываемые функции. Это же действие выполняется клавишей «F11».
  • Шаг с обходом — пройти один шаг выполнения программы без захода в вызываемые функции. Это же действие выполняется клавишей «F10».
  • Шаг наружу — переход к выполнению одного шага программы на один уровень выше. Это же действие выполняется клавишами «Shift+F11».

Команды пошаговой отладки можно использовать только после приостановки выполнения программы в режиме отладки:

  • После срабатывания точки останова.
  • После приостановки программы вручную командой » Приостановить» в меню «Отладка» или клавишей «Break».

Наступление событий в торговой платформе продолжается, даже когда программа находится в точке останова. Все наступившие события устанавливаются в очередь, и их обработка экспертом будет продолжена после выхода из кода текущего обработчика события.

Читайте также:
Как переходить между программами

Приостановка, возобновление и завершение отладки #

Остановка выполнения программы во время отладки происходит автоматически, как только оно доходит до строки, в которой установлена точка останова. Также отладкой можно управлять вручную:

  • Приостановка выполнения
    Выполнение программы в процессе отладки может быть прервано вручную командой » Приостановить» в меню «Отладка» или клавишей «Break». После приостановки выполнения вы можете использовать команды пошаговой отладки.
  • Возобновление выполнения
    Чтобы возобновить выполнение программы после прерывания, нажмите » Продолжить» в меню «Отладка» или «F5».
  • Завершение отладки
    Чтобы прекратить отладку программы, нажмите » Завершить» в меню «Отладка» или «Shift+F5». Программа будет снята со специального графика, на котором она была запущена для отладки, а сам график будет закрыт.
  • Без исходных MQ4, MQ5 и MQH-файлов отладка невозможна.
  • Не рекомендуется распространять исполняемые EX4/EX5-файлы, полученные в процессе отладки.

Отладка на истории #

Отладка торговых роботов и технических индикаторов может быть запущена не только на ценовых данных, обновляющихся в режиме реального времени, но и на исторических. Работу программы можно проверить на интересующем участке истории, не дожидаясь определенных торговых событий в режиме реального времени.

Отладка на исторических данных происходит в режиме визуального тестирования в тестере стратегий. Программа запускается на графике, который строится по смоделированной в тестере последовательности тиков или по накопленной истории тиков (полученных от брокера).

Чтобы запустить отладку на истории, задайте параметры запуска тестирования в настройках MetaEditor.

Настройка отладки на истории

Расставьте точки останова в коде программы, а затем запустите отладку на исторических данных.

Запуск отладки на истории

После этого будет запущено визуальное тестирование и начнется процесс отладки.

Источник: www.metatrader5.com

Отладка кода

В C#, как и в других появившихся до .NET языках, главная методика по отладке состоит в добавлении точек останова и изучении того, что происходит в коде в конкретные моменты во время его выполнения.

Точки останова

Точку останова (breakpoint) в Visual Studio можно помещать на любую строку кода, которая в действительности выполняется. Самый простой способ — щелчок на необходимой строке в окне редактора кода внутри затененной области вдоль левого края окна документа (или выделение нужной строки и нажатие клавиши ). Это приводит к размещению в данной строке точки останова, которая вызывает прерывание процесса выполнения и передачу управления отладчику. Как и в предыдущих версиях Visual Studio, точка останова обозначается большим кружком слева от соответствующей строки в окне редактора кода. Кроме того, Visual Studio выделяет саму строку, отображая ее текст и фон разными цветами. Щелчок на кружке приводит к удалению точки останова.

Если останов на определенной строке каждый раз не подходит для решения имеющейся проблемы, можно создать так называемую условную точку останова. Для этого выберите в меню Debug (Отладка) пункт Windows — Breakpoints (Окнo — Точки останова). Откроется диалоговое окно, позволяющее указать желаемые детали для точки останова. В этом окне можно выполнять следующие действия:

  • Указать, что выполнение должно прерываться лишь после прохождения точки останова определенное количество раз.
  • Указать, что точка останова должна вступать в действие при каждом n-ном достижении строки, например, при каждом 20-м ее выполнении (это удобно при отладке больших циклов).
  • Задать точки останова относительно переменных, а не команд. В таком случае наблюдение будет вестись за значением указанной переменной, и точки останова будут активизироваться при каждом изменении значения этой переменной. Однако этот вариант может сильно замедлить выполнение кода, поскольку на проверку, не изменилось ли значение отслеживаемой переменной после выполнения каждой очередной инструкции, будет тратиться дополнительное время процессора.

Слежения

После срабатывания точки останова обычно необходимо просмотреть значения переменных. Проще всего это сделать, наведя курсор мыши на имя интересующей переменной прямо в окне редактора кода. Это приводит к появлению небольшого всплывающего окошка, в котором показано значение данной переменной; это окошко можно развернуть, чтобы просмотреть дополнительные детали.

Для просмотра значений переменных можно также использовать окно Autos (Автоматические). Окно Autos представляет собой окно с вкладками, которое появляется лишь тогда, когда программа выполняется в режиме отладки. Если вы его не видите, попробуйте выбрать в меню Debug (Отладка) пункт Windows — Autos (Окна — Автоматические).

В этом окне рядом с переменными, которые являются классами или структурами, отображается пиктограмма с изображением знака «плюс», щелчок на которой позволяет развернуть представление переменной и просмотреть значения ее полей.

Три предлагаемых в этом окне вкладки предназначены для наблюдения за переменными трех разных категорий:

  • Вкладка Autos (Автоматические) позволяет просматривать значения нескольких последних переменных, к которым осуществлялся доступ в процессе выполнения программы.
  • Вкладка Locals (Локальные) позволяет просматривать значения переменных, к которым получается доступ в методе, выполняемом в текущий момент
  • Вкладка Watch (Слежение) позволяет просматривать значения любых интересующих переменных за счет явного указания их имен непосредственно в окне Watch.

Исключения

Исключения являются замечательным средством для обеспечения надлежащей обработки ошибок в поставляемом приложении. В случае правильного применения они позволяют обрести уверенность в том, что приложению удастся справиться с трудностями, а перед пользователем никогда не появится диалоговое окно с техническим описанием неполадки. К сожалению, во время отладки исключения не столь замечательны. На то имеются :

  • Если исключение возникает во время отладки, часто не нужно, чтобы оно обрабатывалось автоматически, особенно если это подразумевает аккуратное завершение программы. Напротив, отладчик должен помочь выяснить, по какой причине возникло это исключение. Конечно же, трудность состоит в том, что в случае написания качественного надежного и отказоустойчивого кода, программа будет автоматически обрабатывать практически все, в том числе и неполадки, которые требуется обнаружить.
  • Если возникло исключение, для которого не было предусмотрено обработчика, исполняющая среда .NET все равно будет пытаться его найти. К сожалению, к моменту, когда она обнаружит, что обработчик не существует, выполнение программы будет завершаться. Никакого стека вызовов, следовательно, не останется, и просматривать значения каких-либо переменных будет невозможно, потому что все они будут находиться за пределами области видимости.
Читайте также:
Имя вашего компьютера содержит неанглийские символы нажмите любую кнопку чтобы закрыть программу

Конечно, можно устанавливать точки останова в блоках catch, но это часто особо не помогает, поскольку при достижении блока catch поток управления по определению покинет соответствующий блок try. Это означает, что переменные, значения которых, скорее всего, следовало изучить для выяснения того, что пошло не так, покинут область видимости. Не будет даже возможности просматривать трассировочные данные стека для выяснения, какой метод выполнялся во время срабатывания оператора throw, поскольку управление уже покинет этот метод. Разумеется, помещение точки останова в оператор throw позволит решить эту проблему, но надо учитывать, что при написании кода защищенным образом операторов throw будет в коде очень много. Как тогда угадать, какой из них срабатывает и приводит к генерации исключения?

На самом деле в Visual Studio предлагается очень действенное решение. Если заглянуть в меню Debug (Отладка), то можно будет обнаружить там пункт Exceptions (Исключения). В случае выбора этого пункта открывается диалоговое окно Exceptions (Исключения). Это окно позволяет указывать, что должно происходить при выдаче исключения. Здесь можно указать, что выполнение должно продолжаться или же останавливаться с переходом в режим отладки, в случае чего произойдет останов, а отладчик окажется прямо на самом операторе throw:

Окно Exceptions

Visual Studio известно обо всех классах исключений, которые доступны в базовых классах .NET, и о многих таких исключениях, которых могут выдаваться за пределами среды .NET. Распознавать автоматически специальные классы исключений, создаваемые разработчиками, Visual Studio не умеет, но позволяет вручную добавлять такие классы исключений в список и, следовательно, указывать, какие из таких исключений должны приводить к немедленному прекращению выполнения приложения. Для этого необходимо щелкнуть на кнопке Add (Добавить), которая активизируется при выборе самого верхнего узла в дереве, и ввести имя специального класса исключения.

Дополнительные команды отладки исходного кода

Компиляция практически всего коммерческого программного обеспечения на стадии отладки и на стадии подготовки окончательной версии продукта должна проводиться немного по-разному. Среда Visual Studio способна понимать это, поскольку сохраняет информацию обо всех параметрах, которые ей надлежит передавать компилятору. Для поддержки разных вариантов компоновки проекта Visual Studio потребуется сохранять подобную информацию в более чем одном экземпляре. Разные экземпляры такой информации называются конфигурациями. При создании проекта Visual Studio автоматически предлагает на выбор две таких конфигурации, которые называются, соответственно, Debug (Отладка) и Release (Выпуск):

  • Конфигурация Debug обычно указывает, что никакие операции по оптимизации выполняться не должны, в исполняемом коде должна присутствовать дополнительная отладочная информация, а компилятор должен предполагать, что в коде определен препроцессорный символ отладки Debug, если только он не был явно отменен с помощью директивы #undefined.
  • Конфигурация Release указывает, что компилятор должен проводить в отношении компилируемого кода оптимизацию, в исполняемом коде не должно присутствовать никакой дополнительной информации, а компилятор не должен предполагать наличие препроцессорного символа Debug.

Можно также определять собственные конфигурации. Это необходимо, например, для компоновки приложения с несколькими отличающимися версиями. Раньше из-за проблем, связанных с поддержкой кодировки Unicode в Windows NT, но не в Windows 95, для многих проектов на С++ было принято создавать две конфигурации — одну для Unicode, а вторую для (multibyte character set — набор многобайтных символов).

Источник: professorweb.ru

Как работает отладчик

Вот ты все кодишь, кодишь, отлаживаешь,
отлаживаешь . Стоп! А задумывался ли ты как
работает отладчик? Нет? Тогда слушай.
Начнем с того, что все семейство отладчиков
делится на отладчики приложений и
отладчики ядра. Различие в их реализации,
как правило, заключается в том, что
отладчики приложений используют Debugging API ОС
(функции, структуры), а отладчики ядра —
непосредственно отладочные возможности
процессора (регистры, команды). Очевидно,
что отладчики приложений проще в
реализации, посему с них и начнем.

Отладчики приложений

Описывать я буду Windows Debugging API. Итак, для
того, чтобы начать отладку, поток-отладчик
должен запустить отлаживаемый процесс так,
чтобы ОС знала о том, что запускаемый
процесс будет находиться под отладкой. Для
этого надо запустить отлаживаемую
программу функцией CreateProcess с параметром
dwCreationFlag равным DEBUG_ONLY_THIS_PROCESS (или DEBUG_PROCESS,
если отладчик может отлаживать несколько
процессов одновременно). Теперь отладчик
должен войти в т.н. цикл отладки. Для этого
надо войти в цикл, вызывая функцию WaitForDebugEvent
( while(WaitForDebugEvent(. )==1) ) и после завершения
обработки какого-либо события отладки
вызывать ContinueDebugEvent. Итак, обобщенная схема
работы отладчика:

CreateProcess(«путь_к_отлаживаемой_проге». DEBUG_ONLY_THIS_PROCESS. );
while(WaitForDebugEvent(. )==TRUE)
обрабатываем_события(см.далее)
.
.
.

Да, кстати, выше я сказал ПОТОК-отладчик —
это важно (Microsoft recommendation :), чтобы цикл
отладки, описанный выше находился в
отдельном потоке отладчика. Иначе отладчик
будет виснуть во время ожидания событий
отладки. Но это важно для серьезных
отладчиков, а на пока можно этим не
заморачиваться (это тебе так, на будущее).
Теперь нам надо научиться получать события
отладки. Для этого в Win DAPI есть структура
DEBUG_EVENT (посмотри SDK, описывать не буду, т.к.
структура не из маленьких). Указатель на эту
структуру передается первым параметром
функции WaitForDebugEvent, а она в свою очередь
заполняет ее интересной для нас
информацией. Само событие отладки, которое
нужно/можно обрабатывать будет в элементе
DEBUG_EVENT dwDebugEventCode. Итак какие существуют
события отладки:

CREATE_PROCESS_DEBUG_EVENT — в отлаживаемом процессе
создается новый процесс (или отладчик начал
отладку уже активного процесса — нам не надо)
CREATE_THREAD_DEBUG_EVENT — соответственно, в
отлаживаемом процессе создается новый
поток
EXCEPTION_DEBUG_EVENT — в отлаживаемом процессе
возникло исключение (точка останова,
деление на ноль и т.д)
EXIT_PROCESS_DEBUG_EVENT — возникает при выходе из
отлаживаемого процесса
EXIT_THREAD_DEBUG_EVENT — возникает при выходе из
потока отлаживаемого процесса
LOAD_DLL_DEBUG_EVENT — возникает при загрузке DLL в
адресное пространство
OUTPUT_DEBUG_STRING_EVENT — возникает, когда
отлаживаемая программа вызывает OutputDebugString
UNLOAD_DLL_DEBUG_EVENT — отлаживаемый процесс
выгружает DLL
RIP_INFO — (только для Win98), сообщение об
ошибочной ситуации (например закрытие
недопустимых дескрипторов, т.е. ошибки, не
настолько смертельные, как при EXCEPTION_DEBUG_EVENT)

При возникновении событий отладки
существует множество нюансов, не описанных
мной. Например CREATE_PROCESS_DEBUG_EVENT и
CREATE_THREAD_DEBUG_EVENT возникают ПЕРЕД тем как
процесс или поток начнут выполняться.
Почитай более подробно в MSDN, т.к. сегодня мы
создаем ОЧЧЧЕНЬ простой отладчик.

Читайте также:
Какая из программ является субд

Ну вот, кое-что уяснили, теперь напишем что-то
похожее на отладчик:

Вот и все. Компиляй, запускай. Я думаю ты
догадался, что в качестве параметра этому
отладчику следует передать путь к
отлаживаемой программе. Теперь ты знаешь
примитивнейшие основы работы отладчика
приложений под Win. Написанный в качестве
примера отладчик даже не столько отладчик,
сколько прога, отображающая события
отладки. Для создания настоящего отладчика
требуется большое усердие и желание. Если
тебя заинтересовала эта тема, прочти, что
написано об отладке в MSDN и вперед!

Отладчики ядра

Плавно подходим к отладчикам ядра.. Оооооо!
Это очень интересно и настолько же сложно.
Как я уже говорил, отладчики ядра
используют ресурсы процессора. Сразу скажу,
что я ограничусь описанием этих ресурсов и
описанием их использования. Примера проги
не будет В современных процах Intel (и
совместимых с ними), начиная с 80386 нам
доступны 8 отладочных регистров (DR0-DR7),
позволяющие ставить контрольные точки на
чтение/запись областей памяти и портов
ввода/вывода (начиная с Pentium). И это круто,
скажу я тебе! Всего контрольных точек
только четыре Ну ладно, рассмотрим
отладочные регистры DR0-DR7. Наиболее важным
из них является DR7, т.к. именно он является
управляющим регистром отладки, позволяющим
координировать работу точек останова. Да,
кстати все восемь отладочных регистров 32-битные.
Рассмотрим подробнее регистр DR7:

биты 31-30 : поле LEN для т/о (точки останова) 3
биты 29-28 : поле R/W для т/о 3
биты 27-36 : поле LEN для т/о 2
биты 25-24 : поле R/W для т/о 2
биты 23-22 : поле LEN для т/о 1
биты 21-20 : поле R/W для т/о 1
биты 19-18 : поле LEN для т/о 0
биты 17-16 : поле R/W для т/о 0

поле LEN задает длину т/о:
00 — 1 байт
01 — 2 байта
10 — 3 байта
11 — 4 байта

поле R/W задает условие срабатывания т/о:
00 — исполнение команды
01 — запись данных
10 — обращение к порту ввода/вывода (если 3-й
бит регистра CR4 равен 1), иначе не определено
11 — чтение/запись

биты 15-14 : 0-0 (равны нулю)
бит 13 : при его установке любое обращение к
отладочным регистрам (даже из 0 кольца)
вызывает исключение
биты 12-10 : 0-0-1
биты 9-8 : 1-1 (а здесь уже Intel recommendation
бит 7 : 1 — включить т/о 3
бит 5 : 1 — включить т/о 2
бит 3 : 1 — включить т/о 1
бит 1 : 1 — включить т/о 0
биты 8,6,4,2,0 : то же, что и 7,5,3,1, но сбрасывается
при каждом переключении задачи (актуально
для защищенного режима, в реальном режиме
эти пары регистров равноценны)

Регистры DR0-DR3 задают линейные адреса
четырех точек останова (0-3 соответственно).
Тут есть некоторые пометки: если размер т/о —
слово, то адрес толжен быть четным,
если двойное слово, то адрес должен быть
кратный четырем.
И наконец регистр DR6 отображает состояние
отладки:

биты 31-16 : все выставить в единицу
бит 15 : если 1, то исключение вызвано
переключением задач (опять же, актуально
для защищенного режима)
бит 14 : устанавливается при трассировке
бит 13 : устанавливается, если следующая
команда обращается к любому отладочному
регистру (бит 13 регистра DR7 должен быть
установлен)
бит 12 : 0
биты 11-4 : единицы
бит 3 : сработала т/о 3
бит 2 : сработала т/о 2
бит 1 : сработала т/о 1
бит 0 : сработала т/о 0

Ox-x-x, это тебе не Windows Debugging API

;Этот пример в Win не работает (и в DOS окне тоже)
mov eax, 0000000011000000110000010 ; длина т/о равна 1 байт,
ставим на чтение/запись памяти
mov ebx, 90000h ;адрес точки останова (кто прочтет/начнет
писАть — сразу пискнет)
mov dr7, eax
mov dr0, ebx

Отладчики же после установки т/о ждут
генерации int 0x1 при обращении к т/о и получая
управление творят беспредел С портами все
точно так же, но надо сначала установить в
единицу 3-й бит регистра CR4, и задать адрес
порта в один из регистров DR0-DR3.

Из древних возможностей отладки можно
сказать о контрольных точках останова и
трассировке. Контрольная точка останова
реализуется с помощью опкода 0xCC. Встретив
его, процессор вызывает int 0x3 и запоминает в
стеке регистр флагов, регистр CS, регистр IP,
запрещает преревания (флаг FI в регистре
флагов устанавливается в 0), сбрасывает флаг
трассировки. После этого отладчик опять же
может делать с программой все что угодно. И
о трассировке. Она организуется установкой
флага TF (флаг трассировки) в единицу.
Установил TF в единицу, и процессор после
каждой команды будет вазывать int 0x1,
сохраняя в стеке регистр флагов и регистр IP
и очищая флаг TF. Хитрый отладчик
перехватывал исключение и — опять беспредел
Для отладки в реальном режиме процессора
отладчик должен был перехватывать
прерывания(исключения) 0x1 и 0x3 и
обрабатывать их по своему усмотрению. В
защищенном режиме в принципе все так же (в
смысле так же надо перехватывать 0x1 и 0x3), но
здесь при возникновении исключения
предоставляется больше информации, но
программировать в защищенном режиме
достаточно сложно. А уж в нулевом кольце
защиты Windows и подавно. Чуть не забыл сказать
об т.н. эмулирующих отладчиках. Эти
отладчики эмулируют выполнение команд
процессора отлаживаемой программы (ну и
регистры проца конечно эмулируют). С точки
зрения защиты от антиотладочного кода это
большое подспорье. Но и на эмулирующие
отладчики управа всегда найдется.

К чему пришли.

Ну вот, теперь ты знаешь, пусть примерно,
как работают отладчики. Да, кстати, SoftIce —
отладчик ядра, а так же единственный из них,
способный отлаживать используя один комп.
«Что значит один комп?» — спросишь ты. А
это значит что остальные известные
отладчики ядра ведут отладку «по модему»,
т.е. отлаживаемая система вместе с ядром
отладчика на одном компе, а управление
ядром происходит по сети, другим компом. Вот
так-то. А как правило встроенные в средства
разработки отладчики — не что иное как
отладчики приложений, причем не самые
лучшие. Что же использовать, спосишь ты меня.
Да ты и сам знаешь — SoftIce А еще неплохой
отладчик — WinDBG. Он идет вместе с PlatformSDK. Удачи
в ловле жуков!

Источник: xakep.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru