У меня есть огромная оснастка MMC, написанная на Visual C ++ 9. Время от времени, когда я нажимаю F5 в MMC, происходит сбой mmc.exe. Если я присоединяю к нему отладчик, я вижу следующее сообщение:
В mmc.exe произошло переполнение буфера, которое повредило внутреннее состояние программы. Нажмите Break, чтобы отладить программу, или Continue, чтобы прервать программу.
Подробнее см. В разделе справки «Как отладить проблемы переполнения буфера».
Прежде всего, нет Как отлаживать проблемы переполнения буфера тема в любом месте.
Когда я проверяю стек вызовов, я вижу, что это, скорее всего, что-то с cookie-файлами безопасности, используемыми для защиты от переполнения буфера, выделенного стеком:
MySnapin.dll!__crt_debugger_hook() Unknown
MySnapin.dll!__report_gsfailure() Line 315 + 0x7 bytes C
mssvcr90d.dll!ValidateLocalCookies(void (unsigned int)* CookieCheckFunction=0x1014e2e3, _EH4_SCOPETABLE * ScopeTable=0x10493e48, char * FramePointer=0x0007ebf8) + 0x57 bytes C
msvcr90d.dll!_except_handler4_common(unsigned int * CookiePointer=0x104bdcc8, void (unsigned int)* CookieCheckFunction=0x1014e2e3, _EXCEPTION_RECORD * ExceptionRecord=0x0007e764, _EXCEPTION_REGISTRATION_RECORD * EstablisherFrame=0x0007ebe8, _CONTEXT * ContextRecord=0x0007e780, void * DispatcherContext=0x0007e738) + 0x44 bytes C
MySnapin.dll!_except_handler4(_EXCEPTION_RECORD * ExceptionRecord=0x0007e764, _EXCEPTION_REGISTRATION_RECORD * EstablisherFrame=0x0007ebe8, _CONTEXT * ContextRecord=0x0007e780, void * DispatcherContext=0x0007e738) + 0x24 bytes C
ntdll.dll!7c9032a8()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7c90327a()
ntdll.dll!7c92aa0f()
ntdll.dll!7c90e48a()
MySnapin.dll!IComponentImpl<CMySnapin>::GetDisplayInfo(_RESULTDATAITEM * pResultDataItem=0x0007edb0) Line 777 + 0x14 bytes C++
// more Win32 libraries functions follow
У меня много кода, и я не знаю, где может произойти переполнение буфера и почему. Я нашел это обсуждение на форуме и, в частности, совет заменить все подобные wcscpy функции на более безопасные версии, такие как wcscpy_s () . Я последовал совету, и это не приблизило меня к решению проблемы.
Как отладить мой код и выяснить, почему и где происходит переполнение буфера в Visual Studio 2008?