用iibjson试试,catch不行,在target Cross compiled linux board
With Iibjson try, catch is not working, in target Cross compiled linux board
我在 C++ 的构造函数中尝试捕获 class
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"
}
}
}
当我创建这个 class 的对象时,它给出错误并在抛出 '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;
}
问题的根本原因似乎在libjson:JSONStream,它有重载的<< & parse函数确实会抛出异常,但在他们的签名中他们只是throw(),表明它不会抛出异常。
因此,当实际发生异常时,将按照此处的说明调用终止
http://www.gotw.ca/publications/mill22.htm
解决方案是更改 libjson JSONStream class 函数的签名(<< & 解析)- 在 libjson 中提出错误单以修改 JSONStream class 函数的签名( << & 解析)
终于成功了。
Windows 编译器似乎会忽略这一点,但 linux g++ 编译器不会
我在 C++ 的构造函数中尝试捕获 class
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"
}
}
}
当我创建这个 class 的对象时,它给出错误并在抛出 '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;
}
问题的根本原因似乎在libjson:JSONStream,它有重载的<< & parse函数确实会抛出异常,但在他们的签名中他们只是throw(),表明它不会抛出异常。
因此,当实际发生异常时,将按照此处的说明调用终止 http://www.gotw.ca/publications/mill22.htm
解决方案是更改 libjson JSONStream class 函数的签名(<< & 解析)- 在 libjson 中提出错误单以修改 JSONStream class 函数的签名( << & 解析)
终于成功了。
Windows 编译器似乎会忽略这一点,但 linux g++ 编译器不会