最近碰到這個問題,,,,
總是程式執行一段時間才出現錯誤,很麻煩。。。
一度不想理會這個bug,但是幾天后,只要執行一段時間,這個bug就跑出來噁心人。。。
不得已我需要解決。。
VS2005給我的提示資訊為:
Integer division by zero
正被停用的啟用上下文不是最近啟用的
第一句很簡單,除0 了。。
但是那麼多代碼為哪兒找去。。。
/// Begin -- 引用的文章=====================================
項目程式啟動並執行時候,突然出現這個錯誤,呼叫堆疊中的函數,沒有一個是自己寫的,非常困惑。
在網上搜尋了一下,先找到一個提示,可以在CApp::InitInstance()中禁用ActivationContext:
afxAmbientActCtx= FALSE;
這種做法能“解決”問題,但進一步查證後發現這實際上是隱藏問題。
Junfeng Zhang在自己的部落格中給了比較詳細的解釋(http://blogs.msdn.com/b/junfeng/archive/2006/03/19/sxs-activation-context-activate-and-deactivate.aspx)。基本上出現這個錯誤,是因為在代碼中拋 出了異常,從而跳過了與Context
Activation對應的Deactivation,導致後續調用Deactivation時,發現棧中的Context不對。
而MSDN 論壇中, 網友MMDev在回答別人的文章(http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/c3feab0f-601b-4ca6-beb2-8d4d615438cc/)時給出了比較好的解決方案:
在Visual Studio中,選擇Debug | Exceptions功能表項目,在彈出的對話方塊中,勾選所有的Win32 Exceptions,這樣在Win32的異常拋出時,程式就會中斷,這樣就有機會在第一時間(異常處理前)看到自己的代碼中發生了什麼錯誤導致拋出異常,從而改正錯誤,消除程式中的隱患。
/// End -- 引用的文章=====================================
關鍵一點,在Debug | Exception裡面勾選 Win32 Exceptions,第一時間處理異常。。
因此我一下子就定位到了該異常除,然後恍然大悟,看到代碼猶如醍醐灌頂,快感瞬間像電擊一樣流過全身。。
就這麼easy的解決了這個bug....
哈哈哈 ,,,,,,,,,,