как получить сообщение всеобъемлющего исключения [дубликат]

Этот вопрос уже имеет ответ здесь:

Если я хочу записать полезную информацию в файл каждый раз, когда я поймал всеобъемлющее исключение, как сделать это?

try
{
   //call dll from other company
}
catch(...)
{
   //how to write info to file here???????
}
31
задан STF 1 March 2016 в 12:34
поделиться

4 ответа

Вы не можете получить никакой информации из блока ... catch. Вот почему код обычно обрабатывает исключения следующим образом:

try
{
    // do stuff that may throw or fail
}
catch(const std::runtime_error& re)
{
    // speciffic handling for runtime_error
    std::cerr << "Runtime error: " << re.what() << std::endl;
}
catch(const std::exception& ex)
{
    // speciffic handling for all exceptions extending std::exception, except
    // std::runtime_error which is handled explicitly
    std::cerr << "Error occurred: " << ex.what() << std::endl;
}
catch(...)
{
    // catch any other errors (that we have no information about)
    std::cerr << "Unknown failure occurred. Possible memory corruption" << std::endl;
}
57
ответ дан 27 November 2019 в 21:49
поделиться

В обработчике catch-all нет возможности узнать что-либо о конкретном исключении. Лучше всего, если вы можете поймать исключение базового класса, например, std::exception, если это вообще возможно.

6
ответ дан 27 November 2019 в 21:49
поделиться

Вы не можете получить никаких деталей. Весь смысл catch(...) заключается в том, чтобы иметь такой "я не знаю, что может произойти, поэтому ловите все, что брошено". Обычно вы размещаете catch(...) после catch'ов для известных типов исключений.

3
ответ дан 27 November 2019 в 21:49
поделиться

Я думаю, он хочет записать в журнал, что произошла ошибка, но не требует конкретно точной ошибки (в этом случае он напишет свой собственный текст ошибки).

Ссылка DumbCoder, размещенная выше, содержит учебник, который поможет вам получить то, чего вы пытаетесь достичь.

1
ответ дан 27 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: