使用Python,我可以轻松地获得异常的名称,如下所示。
有没有类似的方法用C ++查找异常名称?
当我运行x = 3/0时,编译后的二进制文件只会抛出“浮点异常”,与python相比,它没那么有用。
答案 0 :(得分:4)
虽然您无法轻易询问异常的名称,但如果异常来自std::exception
,您可以找到与what()
一起显示的指定原因:
try
{
...
}
catch (const std::exception &exc)
{
std::err << exc.what() << std::endl;
}
在旁注中,除以0并不能保证引发C ++异常(我认为MS平台可能会这样做,但你不会在Linux上得到它)。
答案 1 :(得分:1)
如果您想知道异常类的名称,可以使用RTTI。但是,绝大多数C ++代码都会抛出一个从std :: exception派生的异常。
但是,你得到的只是std :: exception :: what中包含的异常数据,你可以从RTTI获取异常类的名称,并在需要更多信息时明确捕获它(并且它包含更多信息)
答案 2 :(得分:1)
对于大多数例外,如果您在编译器中设置了RTTI选项,则可以执行以下操作:
catch(std::exception & e)
{
cout << typeid(e).name();
}
不幸的是,除以零抛出的异常并不是从std :: exception派生的,所以这个技巧不起作用。
答案 3 :(得分:1)
如果这是一个调试问题,您可以将编译器设置为在遇到异常时中断,这可能是无限有用的。