我有一個奇怪的事件發生,我還沒有能夠堅持。什麼可以重寫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(...)'以確保捕獲所有異常 –