求教[大神,MFC程式,點擊對話框的右上角的關閉按鈕(x按鈕)時,有時會觸發斷點,有時不會處罰斷點,這是什么原因啊,程式能夠正常運行,功能也能狗全部實作,就是點擊右上角的關閉按鈕,有時會出現那種情況,有時不會出現,會不會是記憶體 泄漏導致的啊。
uj5u.com熱心網友回復:
有沒有高手知道啊?不點擊關閉按鈕時,一切是正常的,功能都能實作,點擊關閉按鈕后,有時出現觸發斷點,有時不觸發斷點uj5u.com熱心網友回復:
基本上記憶體泄漏,或者一些關閉前的操作非法uj5u.com熱心網友回復:
2樓:我這個有記憶體泄漏,記憶體泄漏會導致那樣的情況出現嗎?uj5u.com熱心網友回復:
先解決記憶體泄漏問題,看看還會不會例外uj5u.com熱心網友回復:
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。uj5u.com熱心網友回復:
利用 F5 除錯方式讓程式跑起來,然后 觀察 除錯,堆疊視窗。往下看, 看看是在你的哪個函式范圍內。uj5u.com熱心網友回復:
這是除錯時,錯誤定位的函式:
LRESULT CALLBACK
AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
// special message which identifies the window as using AfxWndProc
if (nMsg == WM_QUERYAFXWNDPROC)
return 1;
// all other messages route through message map
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
ASSERT(pWnd != NULL);
ASSERT(pWnd==NULL || pWnd->m_hWnd == hWnd);
if (pWnd == NULL || pWnd->m_hWnd != hWnd)
return ::DefWindowProc(hWnd, nMsg, wParam, lParam);
return AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam);
}
uj5u.com熱心網友回復:
LRESULT CALLBACK
AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
// special message which identifies the window as using AfxWndProc
if (nMsg == WM_QUERYAFXWNDPROC)
return 1;
// all other messages route through message map
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
ASSERT(pWnd != NULL);
ASSERT(pWnd==NULL || pWnd->m_hWnd == hWnd);
if (pWnd == NULL || pWnd->m_hWnd != hWnd)
return ::DefWindowProc(hWnd, nMsg, wParam, lParam);
return AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam);
}
紅色就是錯誤定位時的地方,呼叫堆疊里面都是看不懂的函式,自己寫的程式里都沒有,唯一一個還定位與MFC自動生成的一個地方
CGWSQDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置處理何時用
// “確定”來關閉對話框的代碼
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置處理何時用
// “取消”來關閉對話框的代碼
}
求助啊,編程菜鳥啊
uj5u.com熱心網友回復:
紅色的即為錯誤定位時的地方。
一般情況下是,一天沒運行那個MFC程式以后,就容易關閉對話框按鈕后,出現斷點,但是過一段時間就好了
uj5u.com熱心網友回復:
檢查是否資源泄漏的辦法之一:在任務管理器 行程 查看 選擇列 里面選擇:記憶體使用、虛擬記憶體大小、句柄數、執行緒數、USER物件、GDI物件
讓你的程式(行程)不退出,回圈執行主流程很多遍,越多越好,比如1000000次甚至無限回圈,記錄以上各數值,再隔至少一小時,越長越好,比如一個月,再記錄以上各數值。如果以上兩組數值的差較大或隨時間流逝不斷增加,則鐵定有對應資源的資源泄漏!
搜“GDI泄露檢測”
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/119415.html
標籤:界面
上一篇:多執行緒CPU利用率有時高有時低
