我有一个奇怪的事件发生,我还没有能够坚持。什么可以重写main()的返回码?
我有测试用例应该会捕获错误并从main返回相应的错误代码,但是/有时/在测试运行时,即使错误代码为非零,程序也会返回0。
引发的异常类是:
class exit_request {
public:
explicit exit_request(int code = 0) : m_code(code) {}
int code() const { return m_code; }
private:
int m_code;
};
测试用例代码:
int main(int argc, char* argv[])
{
try {
// Do some test case stuff
// Eventually, due to the supplied command line arguments,
// we expect an exit_request() to be thrown from within
// library code.
}
catch (exit_request& exp) {
std::cout << "Exit Request:" << exp.code() << std::endl;
return exp.code();
}
catch (std::exception& err) {
std::cout << "Error: " << err.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
在此测试情况下多次运行,一切正常:该exit_request()抛出异常,被捕获,exp.code()被打印出来(它的值是2),并且来自进程的返回代码是2.
然而,偶尔,进程的返回代码是0(即没有失败) ,即使exp.code()打印为2.
任何人都可以帮助解释这种情况可能发生吗?即在进程退出之前,main的返回值从非零变为零?
这发生在Windows 7(x64)上,使用MSVC++ 2010 Express构建x86(32位)应用程序。我还没有在其他任何Windows或Linux平台或编译器上看到过这种奇怪的失败,但这并不一定意味着它在这些环境中不会发生。
尝试添加一个catch(...)'以确保捕获所有异常 –