Zrobiłam próbkę, aby sprawdzić, co się stanie, gdy Ctrl + C jest wciśnięty w oknach aplikacji konsoli:dlaczego coraz pierwszy wyjątek Chace w C++
bool TerminationFlag=true;
int main()
{
g_hTerminateEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
::SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE);
while(1)
{
if(TerminationFlag == false)
{
break;
}
}
return 0;
}
BOOL WINAPI ConsoleCtrlHandler(DWORD dwCtrlType)
{
if (dwCtrlType == CTRL_C_EVENT ||
dwCtrlType == CTRL_BREAK_EVENT ||
dwCtrlType == CTRL_CLOSE_EVENT)
{
TerminationFlag=false;
::SetEvent(g_hTerminateEvent);
return TRUE;
}
return FALSE;
}
I badanego kodu uruchamiając go za pomocą rozpocząć debugowanie opcję wizualnej studio po naciśnięciu ctrl + C otrzymuję następujący komunikat
Pierwsza szansa wyjątek w 0x7c87647d
kiedy Wciś nię cie kontynuacji opcji mój kod dochodzi do linii TerminationFlag=false;
mimo, że obsługuję Ctrl + C w obsłudze kontrolnej. Czy możesz mi powiedzieć, jaki jest problem?
Kiedy pojawia się wyjątek pierwszej szansy, spójrz na rekord wyjątku, aby zobaczyć, co się podnosi i dlaczego. –
@RaymondChen jak spojrzeć na rekord wyjątku sir? – Dany
Rekord wyjątków jest częścią wyrażenia "EXCEPTION_POINTERS" przekazanego do obsługi wyjątku. Niektóre debuggery mają specjalne polecenie do wyświetlenia bieżącego rekordu wyjątku. (Na przykład windbg używa '.ecxr'.) –