C ++运行时,显示异常消息

时间:2010-04-26 17:14:05

标签: c++ exception

我在linux上使用gcc来编译C ++代码。 有些例外情况不应该处理,应该关闭程序。 但是,我希望能够显示异常字符串:

例如:

throw std::runtime_error(" message");不显示消息,仅显示错误类型。 我也想显示消息。 有办法吗?

它是一个库,我真的不想把catch语句和库用户决定。 但是,现在库用户是fortran,它不允许处理异常。 原则上,我可以将处理程序放在包装器代码中,而不是如果有一种解决方法

5 个答案:

答案 0 :(得分:18)

标准异常有一个虚拟what()方法,可以为您提供与异常相关的消息:

int main() {
   try {
       // your stuff
   }
   catch( const std::exception & ex ) {
       cerr << ex.what() << endl;
   }
}

答案 1 :(得分:6)

你可以用main写一下:

try{

}catch(const std::exception &e){
   std::cerr << e.what() << std::endl;
   throw;
}

答案 2 :(得分:2)

您可以使用try/catch块和throw;语句让库用户处理异常。 throw;语句将控制权传递给另一个处理程序以获取相同的异常。

答案 3 :(得分:1)

我建议为你的图书馆为fortran来电者制作一个适配器。将try / catch放入适配器中。基本上你的库需要多个入口点,如果你想从fortran(或C)调用它,但仍然允许异常来提升C ++调用者。这种方式还具有为C ++调用者提供C ++链接的优点。只有拥有fortran接口才会限制你所有必须通过引用传递的东西,你需要考虑char *参数等的隐藏参数。

答案 4 :(得分:1)

GCC至少从6.2.0开始显示该消息

我已经在g ++ 6.2.0,Ubuntu 16.10上进行了测试,现在又在g ++ 9.3.0 Ubuntu 20.04中进行了测试,并且都显示了此消息,不确定行为何时更改:

#include <stdexcept>

void myfunc() {
    throw std::runtime_error("my message");
}

int main() {
    myfunc();
}

编译并运行:

g++ -ggdb3 -O0 -std=c++11 -Wall -Wextra -pedantic -o main.out main.cpp
./main.out

包含my message错误消息的输出:

terminate called after throwing an instance of 'std::runtime_error'
  what():  my message