Ясно. Ну а если я пользуюсь Code::Blocks ( Visual C++ Toolkit 2003 ) и отладчика у меня там нет. Тогда что делать? Да, даже если я и буду использовать VS C++ для отладки плагина. То без реализации функций DllRegisterServer и DllUnregisterServer, плагин не отладить. А я не использую эти функции ( т.к. регистрирую его в ручную ). Как мне быть в этой ситуации? Что делать? Чем пользоватся? Да, в Code::Blocks никаких логов не создается. Где мне глянуть на эти логи? Если они не создаются
asmic лог для "бедных": Код (Text): void log(const TCHAR* fmt, ...) { static volatile CRITICAL_SECTION critical_section_log; static volatile BOOL init = FALSE; if (!init) { InitializeCriticalSection((LPCRITICAL_SECTION)&critical_section_log); init = !init; } EnterCriticalSection((LPCRITICAL_SECTION)&critical_section_log); SYSTEMTIME tm; GetLocalTime(&tm); TCHAR s[1024]; // The maximum size of the buffer is 1024 characters. (from MSDN) wsprintf(s, _T("%02d/%02d/%4d %d:%d:%d : "), tm.wDay, tm.wMonth, tm.wYear, tm.wHour, tm.wMinute, tm.wSecond); va_list va; va_start(va, fmt); wvsprintf(s+_tcslen(s)-1, fmt, va); s[tabsize(s)-1] = _T('\0'); va_end(va); TCHAR fn[512]; _tcscpy(fn, _T("C:\\log.txt")); FILE*f=_tfopen(fn,_T("a+")); if (f==NULL) { _sntprintf(s, tabsize(s)-1, _T("ERROR:CAN NOT WRITE TO LOG FILE %s\n"), fn); s[tabsize(s)-1] = _T('\0'); } else { _ftprintf(f, _T("%s"), s); fclose(f); } #ifdef LOG_TO_DEBUGGER OutputDebugString(s); #endif // LOG_TO_DEBUGGER #ifdef LOG_TO_SCREEN _tprintf("%s", s); #endif LeaveCriticalSection((LPCRITICAL_SECTION)&critical_section_log); } Soft-ICE: i3here on OllyDBG: Options->Just-in-time debugging->Make OllyDbg just-in-time debugger В исходнике плагина вставить в нужных местах __asm int 3;
Возьми любой из отладчиков (желательно, source level ): WinDbg, OllyDbg. Ну почему — DebugBreak в нужных местах кода и отладчик сам "всплывёт", если зарегистрирован (гугли описание ключа HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug). Создай Логи пишешь ты. Простейший случай - OutputDebugString. Или открыть файл при загрузке библиотеки и писать в него всё, что происходит в функциях. При выгрузке - закрыть.