Как проверить, что все сгенерированные исключения имеют соответствующее условие catch - PullRequest
1 голос
/ 14 января 2010

В java компилятор жалуется на неотслеживаемые исключения.

Я использую исключения в C ++, и мне не хватает этой функции.

Есть ли инструмент, способный сделать это? возможно вариант компилятора (но я сомневаюсь в этом)

Ответы [ 4 ]

3 голосов
/ 14 января 2010

статический анализатор может запустить ваш код и предупредить вас, если функция может выдать необработанное исключение

например старый добрый pc-lint
или покров

3 голосов
/ 14 января 2010

На самом деле нет никакого способа сделать это в C ++. Но достаточно просто обеспечить обработку исключений по умолчанию на верхнем уровне вашей программы, которая будет отлавливать все, что пропущено на нижних уровнях. Конечно, вы действительно не хотите перехватывать большинство исключений на этом уровне, но вы можете по крайней мере предоставить разумные диагностические сообщения.

1 голос
/ 14 января 2010

Java имеет проверенные исключения , что отличается от того, как в C ++ это происходит. Одним из способов перехвата всех исключений является синтаксис ..., как показано ниже:

try
{
  // code here can throw
}
catch ( const std::exception& stde )
{
  // handle expected exception
}
catch ( ... )
{
  // handle unexpected exceptions
}

Существует также механизм времени выполнения для реагирования на неожиданные исключения с помощью set_unexpected(), хотя его полезность составляет дискуссионный .

Предпочтительным подходом является попытка написать код безопасного исключения .

1 голос
/ 14 января 2010

Вам просто нужно перехватить все исключения на верхнем уровне. Обычно этого будет достаточно:

try {
   //do stuff
} catch( std::exception& e ) {
 // log e.what() here
} catch( YourCustomExceptionHierarchyRoot& e) {
 // Perhaps you have smth like MFC::CException in your library
 // log e.MethodToShowErrorText() here
} catch( ... ) {
 // log "unknown exception" here
}

вам нужно будет сделать это на верхнем уровне вашей программы (что-то вроде main ()).

Кроме того, если вы реализуете COM-методы, вам придется делать то же самое для каждого фрагмента кода, доступного для COM - выброс исключений через границы COM недопустим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...