try-catch scheint exception nicht abzufangen



  • Moin.

    Ich versuche zum ersten mal unter C++ Exceptionhandling zu betreiben, was aber nicht zu funktionieren scheint.

    Für Testzwecke habe ich für Windows CE ein einfaches MFC Projekt erstellt und folgendes versucht:

    CChildView::CChildView()
    {
    		try
    		{
    			RETAILMSG(true,(_T("try 01\n")));
    			int *b = 0;
    			*b = 55;
    			RETAILMSG(true,(_T("try 02\n")));
    		}
    		catch (...)
    		{
    			RETAILMSG(true,(_T("exception\n")));
    		}
    
    		RETAILMSG(true,(_T("nach try catch\n")));
    }
    

    Es wird also eine exception im try Block ausgelöst. Die Ausgabe sagt aber:

    try 01
    Unhandled exception at 0x00011a4c in TryCatch.exe: 0xC0000005: Access violation.
    Das Programm "[0x58300B6] TryCatch.exe" wurde mit Code -1073741819 (0xc0000005) beendet.

    Wieso wird das nicht abgefangen?



  • Weil per Default nur C++ Exceptions und keine structured Exceptions gefangen werden.

    Versuch dazu die extra Statement __try und __catch und Windows. Unter Linux solltest du einen Signal-Handler setzen.

    http://msdn.microsoft.com/en-us/library/s58ftw19(v=vs.80).aspx



  • Unter Linux solltest du einen Signal-Handler setzen.

    Unter Windows auch: http://msdn.microsoft.com/en-us/library/ms680634.aspx



  • Sowas solltest du mit dem Debugger schnell finden und beheben. Access violations sind schwere Programmierfehler.
    Davon abgesehen sollte man nur die Exceptoins fangen, die man auch beheben kann. Ein catchallist nur an Modulgrenzen sinnvoll, wenn überhaupt.



  • pumuckl schrieb:

    Sowas solltest du mit dem Debugger schnell finden und beheben. Access violations sind schwere Programmierfehler.
    Davon abgesehen sollte man nur die Exceptoins fangen, die man auch beheben kann. Ein catchallist nur an Modulgrenzen sinnvoll, wenn überhaupt.

    Da bin ich gleicher Meinung - besonders sinnvoll ist, denke ich (in grösseren Projekten), einen Dump zu schreiben (z.B. MiniDump unter Windows).


Anmelden zum Antworten