C++ throw with try catch all always hits terminate in C++ 11 14 and 17
c++ throw with try catch all always hits terminate in C++ 11 14 and 17
对于我使用 GCC 9.2 抛出的任何内容,我总是收到终止调用,即使它被捕获了。
terminate called after throwing an instance of 'char const*'
terminate called recursively
我测试了-std=c++17、-std=c++14、-std=c++11
示例测试:
#include <iostream>
int main()
{
try
{
throw "not found";
}
catch(...)
{
std::cout << "test" << std::endl;
}
return 0;
}
如果我使用 visual studio 或在多个在线编译器上编译,它不会失败。
例子:
https://repl.it/languages/cpp
https://www.onlinegdb.com/online_c++_compiler
我也尝试过将 throw 放入函数中并添加 noexcept(false),但这也失败了。示例:
#include <iostream>
void foo() noexcept(false)
{
throw std::runtime_error( "test1" );
}
int main()
{
try
{
foo();
}
catch(...)
{
std::cout << "test2" << std::endl;
}
return 0;
}
编辑:
系统信息:
我正在使用 9-2020-q2-update - arm-linux-none-gnueabihf.
基本上,设置是 Linux x86 作为我的主计算机,为 ARM Cortex-A 处理器交叉编译。我正在测试的处理器是 Raspberry Pi 4 和 BeagleBone Black。
代码编译正确并在目标处理器上运行良好,除非遇到异常。在这一点上,它命中任何抛出终止。
我将 Eclipse 用作 IDE,使用远程调试上传并单步执行任一目标处理器上的代码。
似乎存在错误或异常处理在 GCC 9.2 版(仅限 ARM?)编译器上不起作用。
我尝试使用版本 8.3-2019.03 - arm-linux-gnueabihf - Linux x86 编译器,它们工作正常。除了编译开关之外,无需进行其他更改。
对于我使用 GCC 9.2 抛出的任何内容,我总是收到终止调用,即使它被捕获了。
terminate called after throwing an instance of 'char const*'
terminate called recursively
我测试了-std=c++17、-std=c++14、-std=c++11
示例测试:
#include <iostream>
int main()
{
try
{
throw "not found";
}
catch(...)
{
std::cout << "test" << std::endl;
}
return 0;
}
如果我使用 visual studio 或在多个在线编译器上编译,它不会失败。 例子: https://repl.it/languages/cpp https://www.onlinegdb.com/online_c++_compiler
我也尝试过将 throw 放入函数中并添加 noexcept(false),但这也失败了。示例:
#include <iostream>
void foo() noexcept(false)
{
throw std::runtime_error( "test1" );
}
int main()
{
try
{
foo();
}
catch(...)
{
std::cout << "test2" << std::endl;
}
return 0;
}
编辑:
系统信息:
我正在使用 9-2020-q2-update - arm-linux-none-gnueabihf.
基本上,设置是 Linux x86 作为我的主计算机,为 ARM Cortex-A 处理器交叉编译。我正在测试的处理器是 Raspberry Pi 4 和 BeagleBone Black。
代码编译正确并在目标处理器上运行良好,除非遇到异常。在这一点上,它命中任何抛出终止。
我将 Eclipse 用作 IDE,使用远程调试上传并单步执行任一目标处理器上的代码。
似乎存在错误或异常处理在 GCC 9.2 版(仅限 ARM?)编译器上不起作用。
我尝试使用版本 8.3-2019.03 - arm-linux-gnueabihf - Linux x86 编译器,它们工作正常。除了编译开关之外,无需进行其他更改。