У меня есть некоторая программа, и каждый раз я выполняю ее, она выдает исключение, и я не знаю, как проверить то, что точно она бросает, таким образом, мой вопрос, это возможный поймать исключение и распечатать его (я нашел строки, который выдает исключение), заранее спасибо
Если оно является производным от std::exception
, вы можете ловить по ссылке:
try
{
// code that could cause exception
}
catch (const std::exception &exc)
{
// catch anything thrown within try block that derives from std::exception
std::cerr << exc.what();
}
Но если исключение является каким-то классом, который не является производным от std::exception
, вам придется заранее знать его тип (т.е. нужно ли ловить std::exception
. например, нужно ли ловить std::string
или some_library_exception_base
).
Вы можете сделать catch all:
try
{
}
catch (...)
{
}
но тогда вы не сможете ничего сделать с исключением.
Сначала попробуйте, как предложил Р. Самуэль Клатчко. Если это не помогает, есть еще кое-что, что может помочь:
a) Установите точку останова на типе исключения (обработанном или необработанном), если ваш отладчик поддерживает это.
б) В некоторых системах компилятор генерирует вызов (недокументированной?) Функции при выполнении оператора throw. Чтобы узнать, какая функция это для вашей системы, напишите простую программу hello world, которая генерирует и перехватывает исключение. запустите отладчик и поместите точку останова в конструктор исключений и посмотрите, откуда он вызывается. функция вызова, вероятно, похожа на __throw (). после этого снова запустите отладчик с программой, которую вы хотите исследовать, в качестве отлаживаемой. поместите точку останова на функцию, упомянутую выше (__throw или что-то еще), и запустите программу. когда генерируется исключение, отладчик останавливается, и вы тут же выясняете, почему.