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


Точки прерывания и пошаговый проход - часть 4


Для перехода в режим пошагового выполнения процессоров Intel Pentium требуется установить (в единичное состояние) бит 8 регистра флагов. Справочное руководство Intel называет его битом ловушки — Trap Rag (TF или флагом трассировки). В листинге 4-5 приведена функция Setsingiestep и действия, необходимые для установки бита TF. После замены точки прерывания исходным кодом операции отладчик отмечает в своем внутреннем состоянии, что он ожидает пошагового выполнения, устанавливает в CPU соответствующий режим и затем продолжает процесс.

Листинг 4-5.Функция SetSingleStep из 1386CPUHELP.C

BOOL CPUHELP_DLLIMNTERFACE _stdcall 

SetSingleStep ( PDEBUGPACKET dp) 

{

BOOL bSetContext;

ASSERT ( FALSE == IsBadReadPtr ( dp, sizeof ( DEBUGPACKET)));

if ( TRUE = IsBadReadPtr ( dp, sizeof ( DEBUGPACKET)))

{

TRACED ( "SetSingleStep : invalid parameters\n!");

return ( FALSE);

}

// Для i386, просто установить TF-бит.

dp->context.EFlags |= TF_BIT;

bSetContext = DBG_SetThreadContext ( dp->hThread,

&dp->context);

ASSERT ( FALSE != bSetContext);

return ( bSetContext);

}

После того как основной отладчик разблокирует процесс, вызывая функцию ContinueDebugEvent, этот процесс после каждого выполнения отдельной инструкции немедленно генерирует пошаговое исключение. Чтобы удостовериться, что это было ожидаемое пошаговое исключение, отладчик проверяет свое внутреннее состояние. Поскольку отладчик ожидал такое исключение, т "знает", что точка прерывания должна быть переустановлена. На каждом отдельном шаге этого процесса указатель команд продвигается в позицию, предшествующую исходной точке прерывания. Поэтому отладчик может устанавливать код операции точки прерывания обратно в ее исходное положение. Каждый раз, когда происходит исключение типа EXCEPTION_  SINGLE_STEP, операционная система автоматически сбрасывает бит TF, так что нет никакой необходимости сбрасывать его с помощью отладчика. После установки точки прерывания основной отладчик разблокирует подчиненный, и тот продолжает выполняться.




Начало  Назад  Вперед



Книжный магазин