我在 C++ 类的构造函数中尝试捕获
class jsonAdap
{
jsonAdap(const char *text)
{
try
{
parsejson(text);//this calls a libjson function that throws the expection throw std::invalid_argument("exception")
}
catch(std::invalid_argument)
{
cout<<"Exception captured:"<<endl"
}
}
}
当我创建此类的对象时,它会给出错误并在抛出“std::invalid_argument”的实例后停止调用终止。
这是在 ARM 上交叉编译的情况(使用 -O0 -g3 -Wall -c -fmessage-length=0 -pthread -Wno-reorder -std=gnu++0x -fstack-protector-all -Wno-format-contains -nul -Wno-format-extra-args -Wno-format-zero-length) ,
但在 Windows 上,它会正确捕获错误。
当我尝试使用与交叉编译相同的选项的示例应用程序时,它在板上运行良好。
是否有任何编译器设置可能导致这种行为,我可能没有注意到?
有什么建议么?
下面是示例应用程序
class ctest
{
public:
ctest()
{
int x = -1;
try {
cout << "Inside try \n";
if (x < 0)
{
throw std::invalid_argument("test");
cout << "After throw (Never executed) \n";
}
}
catch (std::invalid_argument &e) {
cout << "Exception Caught \n";
}
}
void test(){};
};
int main( int argc, char* argv[] )
{
cout << "Before try \n";
ctest c;
cout << "cdone "<<endl;
return 0;
}