Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование на WinApi, C++Builder, Visual C++


Информационный Канал Subscribe.Ru


Выпуск № 23-2003 BCBDEV.RU

Здравствуйте уважаемые подписчики!

Перед вами очередной выпуск рассылки "Программирование на WinApi"
Переводы многих функций Win32API, которые часто используются в данной рассылке, вы можете получать, подписавшись на дружественную рассылку "WinAPI на русском".
Справочник по функциям Win32API вы можете посмотреть на сайте BcbDev.ru в разделе MSDN по-русски.

Использование поддержки отладчика
Следующий пример использует функции WaitForDebugEvent и ContinueDebugEvent для иллюстрации организации простого отладчика:(MSDN - Using Debugging Support)

DEBUG_EVENT DebugEv;                   // информация события отладки
DWORD dwContinueStatus = DBG_CONTINUE; // продолжение в случае исключения
 
for(;;) 
{ 
 
// Ждем, пока произойдет событие отладки. Второй параметр указывает, что
// из функции не будет возврата, пока не произойдет событие отладки.
 
    WaitForDebugEvent(&DebugEv, INFINITE); 
 
// Обработать код события отладки. 
 
    switch (DebugEv.dwDebugEventCode) 
    { 
        case EXCEPTION_DEBUG_EVENT: 
        // Обработать код исключения. При обработке  
        // исключения, не забудьте установить параметр 
        // статуса(dwContinueStatus). Это значение 
        // используется функцией ContinueDebugEvent. 
 
            switch (DebugEv.u.Exception.ExceptionRecord.ExceptionCode) 
            { 
                case EXCEPTION_ACCESS_VIOLATION: 
                // Первая попытка: Передать это системе. 
                // Последняя попытка: Отобразить соответствующую ошибку. 
 
                case EXCEPTION_BREAKPOINT: 
                // Первая попытка: Отобразить текущую команду 
                // и значение регистра. 
 
                case EXCEPTION_DATATYPE_MISALIGNMENT: 
                // Первая попытка: Передать это системе. 
                // Последняя попытка: Отобразить соответствующую ошибку. 
 
                case EXCEPTION_SINGLE_STEP: 
                // Первая попытка: Обновить отображение текущей инструкции 
                // и значения регистра. 
 
                case DBG_CONTROL_C: 
                // Первая попытка: Передать это системе. 
                // Последняя попытка: Отобразить соответствующую ошибку. 
 
                // Обработка других исключений. 
            } 
 
        case CREATE_THREAD_DEBUG_EVENT: 
        // Как надо исследуйте или изменяйте регистры потока 
        // при помощи функций  GetThreadContext и SetThreadContext; 
        // и приостанавливайте и возобновляйте выполнение потока при помощи функций 
        // SuspendThread и ResumeThread. 
 
        case CREATE_PROCESS_DEBUG_EVENT: 
        // Как надо исследуйте или изменяйте регистры первичного потока 
        // процесса, при помощи функций GetThreadContext и SetThreadContext; 
        // читайте и пишите в виртуальную память процесса при помощи функций
        // ReadProcessMemory и WriteProcessMemory;         
        // и приостанавливайте и возобновляйте выполнение потока при помощи функций 
        // SuspendThread и ResumeThread. 
 
        case EXIT_THREAD_DEBUG_EVENT: 
        // Отобразить код завершения потока. 
 
        case EXIT_PROCESS_DEBUG_EVENT: 
        //  Отобразить код завершения процесса 
 
        case LOAD_DLL_DEBUG_EVENT: 
        // Считать отладочную информацию включенную в недавно загруженную DLL. 
 
        case UNLOAD_DLL_DEBUG_EVENT: 
        // Отобразить сообщение о выгрузке DLL. 
 
        case OUTPUT_DEBUG_STRING_EVENT: 
        // Отобразить выведенную отладочную строку. 
 
    } 
 
// Возобновить выполнение потока, который сообщил о событии отладки. 
 
ContinueDebugEvent(DebugEv.dwProcessId, 
    DebugEv.dwThreadId, dwContinueStatus); 
 
}

Удачи Вам в Ваших делах Куковинец Андрей aka Juggernaut

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное