創建窗口句柄錯誤。這個錯誤非常頭疼,難以排查,我從網絡上搜集了一些排查方案。
可能的原因:
- 窗口句柄泄露,句柄數超過1W。
- 用戶對象超過1W,錯誤提示“當前程序已使用了 Window 管理器對象的系統允許的所有句柄”。
下面的方案適用於窗口句柄泄露的情況。
1.通過任務管理器
,選擇句柄數
、用戶對象
、GDI對象
,來查看進程是否有異常, 一般報這個錯誤時,句柄數都接近1W,而Windows對單個程序的句柄限制是1W。
2.下載安裝Windbg,加載程序,執行以下命令
1. !htrace -enable
2. g / break #開始程序,然后斷點
3. !htrace -snapshot
4. g / break
5. !htrace -diff
查看產生的句柄,發現都是同一線程創建的句柄,記住線程ID
!runaway #列出所有的線程
!8s #切換到線程8 ,當然,8替換成你的線程ID
!clrstack #查看當前線程堆棧
資料:
http://stackoverflow.com/questions/222649/winforms-issue-error-creating-window-handle
http://stackoverflow.com/questions/88904/error-creating-window-handle
http://blogs.technet.com/b/yongrhee/archive/2011/12/19/how-to-troubleshoot-a-handle-leak.aspx
http://www.cnblogs.com/wlflovenet/p/debugCpu100.html
WinDbg
http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi