Udało mi się przejść przez moją karierę programistyczną w C++ do tej pory praktycznie nigdy nie dotykając wyjątków, ale ostatnio pracowałem nad projektem z silnikiem Ogre i staram się właściwie uczyć. Znalazłem tu wiele dobrych pytań i odpowiedzi na temat ogólnego użycia wyjątków C++, ale chciałbym uzyskać stąd opinie zewnętrzne na temat tego, czy użycie Ogre jest dobre i jak najlepiej z nimi pracować.Czy używanie wyjątków przez Ogre jest dobrym sposobem ich użycia?
Na początek, cytując z dokumentacji Ogre z jego własnym klasy Exception:
OGRE nigdy nie używa wartości zwracanych do wskazania błędów. Zamiast tego, jeśli wystąpi błąd, zostanie zgłoszony wyjątek i jest to obiekt, który zawiera szczegóły problemu. Aplikacja wykorzystująca OGRE powinna zawsze zapewnić, że wyjątki zostaną przechwycone, więc wszystkie funkcje silnika OGRE powinny wystąpić w bloku try {} catch (Ogre :: Exception & e) {}.
Naprawdę? Każda funkcja Ogre może rzucić wyjątek i zostać zapakowana w blok try/catch? W chwili obecnej jest to obsługiwane w naszym korzystaniu z niego przez try/catch w głównym, który wyświetli okno komunikatu z opisem wyjątku przed wyjściem. Może to być nieco kłopotliwe przy debugowaniu, ponieważ nie dostajesz śladu stosu, tylko funkcja, która rzuciła błąd - ważniejsza jest funkcja z naszego kodu, która nazywa się funkcja Ogre. Gdyby był to kod w Ogre, to trafiłby prosto do kodu w debugerze i byłbym w stanie dowiedzieć się, co jest łatwiejsze - nie wiem, czy brakuje mi czegoś, co pozwoliłoby mi debugować wyjątki już?
Zaczynam dodać jeszcze kilka bloków try/catch w naszym kodzie teraz, zazwyczaj myśli o tym, czy to ma znaczenie, jeśli funkcja Ogre zgłasza wyjątek. Jeśli jest to coś, co zatrzyma wszystko, co działa, pozwól, aby główny try/catch poradził sobie z nim i wyjdź z programu. Jeśli nie ma to większego znaczenia, złap go zaraz po wywołaniu funkcji i pozwól programowi kontynuować. Jednym z ostatnich przykładów tego było budowanie wektora parametrów programu wierzchołków/fragmentów dla materiałów zastosowanych do obiektu - jeśli materiał nie miał żadnych parametrów, to rzuciłby wyjątek, który złapałem, a następnie zignorowałem, ponieważ nie było ". t potrzeba dodać do mojej listy parametrów. Czy wydaje się to rozsądnym sposobem radzenia sobie z rzeczami? Wszelkie cenne porady dotyczące pracy z Ogrem są bardzo doceniane.
+1 za "Gdziekolwiek można sensownie poradzić sobie z wyjątkiem" – Yacoby
Więc sensownie zajmowanie się wyjątkiem dotyczy mojego ostatniego przykładu znajdowania parametrów? Dopóki nic nie zostanie zmodyfikowane przed wyjątkiem, nie spowoduje żadnych problemów. w dniu dzisiejszym wskazał, jak debugować wyjątki, gdy są one rzucane, co bardzo pomoże, jeśli wyjdę z głównego try/catch w trybie debugowania, co się stanie, jeśli wyjątki nie zostaną przechwycone? – identitycrisisuk
Gdy wyjątki nie zostaną przechwycone, debugger go złapie i wyświetli punkt, z którego został wywołany. – Christopher