[C++] Obsługa try ... catch
Ostatnio zmodyfikowano 2013-06-16 15:46
berkov Temat założony przez niniejszego użytkownika |
» 2013-06-16 12:26:20 Ok, rozumiem.. ale jak Monika doradzila SEH mozna wylapac w nastepujacy sposob: __try { } __except( expression ) { }
tylko pojawia sie ponownie to samo pytanie czyli co tym razem wpisac w "expression", sciagnalem wiec z podanego przez Monike linka i wpisalem praktycznie to samo uzywajac (po lekkiej modyfikacji dla WINAPI) funkcje filter(...), ktora wyglada u mnie tak: int filter( unsigned int code, struct _EXCEPTION_POINTERS * ep ) { MessageBox( 0, "in filter.", 0, 0 ); if( code == EXCEPTION_ACCESS_VIOLATION ) { MessageBox( 0, "Zlapany.", 0, 0 ); return EXCEPTION_EXECUTE_HANDLER; } else { MessageBox( 0, "Niezlapany.", 0, 0 ); return EXCEPTION_CONTINUE_SEARCH; }; }
a teraz wlasciwy kod w ktorym chce wylapac blad: __try { LPSTR string =( LPSTR ) GlobalAlloc( GPTR, 1 ); strcpy( string, "abcdefghijklamnoprst" ); }
__except( filter( GetExceptionCode(), GetExceptionInformation() ) ) { MessageBox( 0, "prawdopodobnie przekroczyles ilosc znakow w stringu", "oj nie dobrze", 0 ); }
No i ponownie ten sam problem czyli przy uruchomieniu programu nie dostaje zadnego MessageBox'a a jedynie blad z kompilatora: XXX.exe triggered a breakpoint. Naprawde na to nie ma zadnej metody? Wiem ze mozna uzyc rozwiazanie zaproponowane przez janakowalksiego ale mi nie tyle chodzi o ten konkretny kod ale o to by miec uniwersalna metode wylapywania bledow w mojej aplikacji, podalem akurat taki przyklad, ktory bedzie pewnie najczestszym bledem. |
|
DejaVu |
» 2013-06-16 13:20:38 W bloku catch podaje się typ danych jaki ma zostać przechwycony. Jeżeli napiszesz: to przechwycić chcesz: catch( const char * sTekst ) { } Jeżeli chcesz przechwycić liczbę to po prostu piszesz: Jeżeli chcesz przechwycić jakiś rzucany obiekt, np. throw CObiekt( 1, "komunikat" );
to piszesz: catch( const CObiekt & obiekt ) { }
Wyjątki służą do obsługiwania zamierzonych i zaplanowanych działań programisty i nie są metodą na zabezpieczenie programu przed niepoprawnym dostępem do pamięci. Nie w C++. |
|
xevuel |
» 2013-06-16 13:23:19 |
|
berkov Temat założony przez niniejszego użytkownika |
» 2013-06-16 15:44:21 @xevuel, dzieki, o to mi chodzilo. zaraz sproboje odpalic w kodzie.
@DejaVu, teraz juz rozumiem, dzieki. Dodatkowo pozwole sobie skorzystac z tego ze juz pisze poniewaz zamknales moj drugi watek (zapytanie sumaryczne w SQL) i nie moge juz tam odpisac: http://cpp0x.pl/forum/temat/?id=11411 mianowicie, bez grupowania takie query nie pojdzie poniewaz nie mozna laczyc agregated funkcji z nieagregated wynikami bo agregated wyrzuci zawsze jeden wynik a nieagregated moze wyrzucic wiecej rzedow. |
|
pekfos |
» 2013-06-16 15:46:57 Dodatkowo pozwole sobie skorzystac z tego ze juz pisze poniewaz zamknales moj drugi watek (zapytanie sumaryczne w SQL) i nie moge juz tam odpisac: |
Jeden problem = jeden temat, a swoje tematy możesz otwierać. |
|
1 « 2 » |