На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Using Debugging Support



The following example uses the WaitForDebugEvent and ContinueDebugEvent functions to illustrate how a simple debugger might be organized.

DEBUG_EVENT DebugEv; // debugging event information
DWORD dwContinueStatus = DBG_CONTINUE; // exception continuation

for(;;)
{

// Wait for a debugging event to occur. The second parameter indicates
// that the function does not return until a debugging event occurs.

WaitForDebugEvent(&DebugEv, INFINITE);

// Process the debugging event code.

switch (DebugEv.dwDebugEventCode)
{
case EXCEPTION_DEBUG_EVENT:

// Process the exception code. When handling
// exceptions, remember to set the continuation
// status parameter (dwContinueStatus). This value
// is used by the ContinueDebugEvent function.

switch (DebugEv.u.Exception.ExceptionRecord.ExceptionCode)
{
case EXCEPTION_ACCESS_VIOLATION:
// First chance: Pass this on to the kernel.
// Last chance: Display an appropriate error.


case EXCEPTION_BREAKPOINT:
// First chance: Display the current
// instruction and register values.

case EXCEPTION_DATATYPE_MISALIGNMENT:
// First chance: Pass this on to the kernel.
// Last chance: Display an appropriate error.

case EXCEPTION_SINGLE_STEP:
// First chance: Update the display of the
// current instruction and register values.


case DBG_CONTROL_C:
// First chance: Pass this on to the kernel.
// Last chance: Display an appropriate error.

// Handle other exceptions.
}

case CREATE_THREAD_DEBUG_EVENT:
// As needed, examine or change the thread's registers
// with the GetThreadContext and SetThreadContext functions;
// and suspend and resume thread execution with the
// SuspendThread and ResumeThread functions.


case CREATE_PROCESS_DEBUG_EVENT:
// As needed, examine or change the registers of the
// process's initial thread with the GetThreadContext and
// SetThreadContext functions; read from and write to the
// process's virtual memory with the ReadProcessMemory and
// WriteProcessMemory functions; and suspend and resume
// thread execution with the SuspendThread and ResumeThread
// functions.


case EXIT_THREAD_DEBUG_EVENT:
// Display the thread's exit code.

case EXIT_PROCESS_DEBUG_EVENT:
// Display the process's exit code.

case LOAD_DLL_DEBUG_EVENT:
// Read the debugging information included in the newly
// loaded DLL.

case UNLOAD_DLL_DEBUG_EVENT:
// Display a message that the DLL has been unloaded.

case OUTPUT_DEBUG_STRING_EVENT:
// Display the output debugging string.


}

// Resume executing the thread that reported the debugging event.

ContinueDebugEvent(DebugEv.dwProcessId,
DebugEv.dwThreadId, dwContinueStatus);

}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Использование, отлаживающий Поддержку



Следующий пример использует WaitForDebugEvent и функции ContinueDebugEvent, чтобы иллюстрировать как простой отладчик мог быть организован.

DEBUG_EVENT DebugEv; // отладочная информация события DWORD dwContinueStatus = DBG_CONTINUE; // исключительное продолжение

для(;;)
{

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

WaitForDebugEvent(&DebugEv, БЕСКОНЕЧНЫЙ);

// Процесс отладочный код события.

ключ (DebugEv.dwDebugEventCode)
{
случай EXCEPTION_DEBUG_EVENT:

// Процесс исключительный код. Когда обработка // исключения, не забывает устанавливать продолжение // параметр статуса (dwContinueStatus). Эта величина // использована функцией ContinueDebugEvent.

ключ (DebugEv.u.Исключение.ExceptionRecord.ExceptionCode)
{
случай EXCEPTION_ACCESS_VIOLATION: // шанс Первого: Передайте это на в зерно.
// Последний шанс: Отобразите подходящую ошибку.


случай EXCEPTION_BREAKPOINT: // шанс Первого: Отобразите течение // инструкция и регистрируйте величины.

случай EXCEPTION_DATATYPE_MISALIGNMENT: // шанс Первого: Передайте это на в зерно.
// Последний шанс: Отобразите подходящую ошибку.

случай EXCEPTION_SINGLE_STEP: // шанс Первого: Скорректируйте дисплей // текущей инструкции и регистрируйте величины.


случай DBG_CONTROL_C: // шанс Первого: Передайте это на в зерно.
// Последний шанс: Отобразите подходящую ошибку.

// Ручка другие исключения.
}

случай CREATE_THREAD_DEBUG_EVENT: // Как и требуется, изучать или изменять регистры / резьбу/ с GetThreadContext и функции SetThreadContext;
// и приостановите и продолжайте выполнение резьбы с // SuspendThread и функции ResumeThread.


случай CREATE_PROCESS_DEBUG_EVENT: // Как и требуется, изучать или изменять регистры // начальной резьбы процесса с GetThreadContext и // функции SetThreadContext; прочитайтесь из и записывайтесь в // виртуальную память процесса с ReadProcessMemory и // функциями WriteProcessMemory; и приостановите и продолжайте // заправлять выполнение с SuspendThread и функции ResumeThread //.


случай EXIT_THREAD_DEBUG_EVENT: // Отображать выходной код резьбы.

случай EXIT_PROCESS_DEBUG_EVENT: // Отображать выходной код процесса.

случай LOAD_DLL_DEBUG_EVENT: // Прочитавшее отладочную информацию включался в вновь // загрузившее DLL.

случай UNLOAD_DLL_DEBUG_EVENT: // Отображать сообщение, что DLL разгружен.

случай OUTPUT_DEBUG_STRING_EVENT: // Отображать выход, отлаживающий строку.


}

// Резюме, выполняющее резьбу, которая сообщала отладочное событие.

ContinueDebugEvent(DebugEv.dwProcessId, DebugEv.dwThreadId, dwContinueStatus);

}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz