2014-01-16 46 views
0

我有一個Windows控制檯應用程序,它使用boost單元測試框架和main()以相當簡單的退出(ret)結束,其中ret是來自boost框架的返回。Windows控制檯應用程序(C++)有錯誤的退出代碼

運行一個示例我看到ret爲201,但調試器和其他人報告的exe返回代碼爲0.什麼會導致返回代碼與參數不同(exit)?

謝謝。

+1

一個代碼示例會有所幫助;) –

+0

如果我有一個簡單的方法來重現它,我會提供一個!我發現的一個建議是,在ExitProcess運行時,Dll卸載期間,錯誤的Dll可能會導致另一個帶有不同退出代碼的ExitProcess(或類似) - 但我不知道如何檢查是否如此。很明顯,簡單的程序按預期工作。 – Dave

回答

0

如果不能提供的代碼,那麼有什麼可以建議是掛鉤的退出回調與std::atexit()和使用黑客從here看看,當你調用回調函數的出口值仍是相同main() 。請記住,雖然您不能使用return,因爲它不會設置該值,所以請用exit()調用替換該值。此外,您將只能看到可以構建自己並添加黑客的DLL的返回代碼。

另外,你可以打電話GetExitCodeProcess(),我不知道如果調用內部和退出回調的行爲,很可能你會得到STILL_ACTIVE值,但仍值得一試。

+0

感謝您的建議。不幸的是,這個問題發生在鉤子被調用之後。代碼中發生了很多事情,所以花了很長時間纔將它降到最低,但我現在已經知道發生了什麼。我們使用了TibEMS.dll,它看起來在卸載它時會導致進程退出代碼變爲零 - 不知道爲什麼,但它現在可以在一個簡單的測試用例中重現。 – Dave

相關問題