日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

句柄泄漏调试经验

發布時間:2025/3/20 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 句柄泄漏调试经验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

句柄泄漏檢測-簡單
在調試之前首先確定是不是真的發生了句柄泄漏,簡單的檢測方法是通過任務管理器來查看進程的句柄數是不是居高不下,任務管理器默認不顯示句柄數,要查看進程的句柄數需要先切換到進程選項卡,然后單擊“查看”菜單,選擇“選擇列”,然后勾選“句柄數”。

句柄泄漏檢測-更多信息
任務管理器只能簡單檢測句柄數,如果要獲得更詳細的信息,可以使用Process Explorer(官方下載地址為http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)通過Process Explorer可以查看進程句柄的類型和名字,如圖所示:

可以通過這些詳細信息來初步判斷那個地方出了問題。

句柄泄漏檢測和調試
Windbg提供了強大的擴展命令!htrace,即句柄跟蹤(Handle Trace),可以通過操作系統來跟蹤所有打開句柄或關閉句柄的調用以及相應的棧回溯。
在命令行下啟動目標程序(源碼下載),讓后將Windbg附加到這個進程上,在Windbg輸入”!htrace -?”,可以查看命令幫助。

我們需要先在Windbg中輸入”!htrace -enable”來開啟棧回溯,然后通過g命令來運行被調試的程序,等到程序運行結束時,再在Windbg中運行”!htrace”來觀察和打開或關閉句柄有關的棧回溯信息,Windbg的調試日志如下:

// 發現部分RSS訂閱工具顯示代碼的格式很混亂 // RSS訂閱讀者可以通過閱讀原文正常查看代碼或者更換訂閱工具 0:001> !trace -? No export trace found 0:001> !htrace -? !htrace [handle [max_traces]] !htrace -enable [max_traces] !htrace -disable !htrace -snapshot !htrace -diff 0:001> !htrace -enable Handle tracing enabled. Handle tracing information snapshot successfully taken. 0:001> g (130c.1558): Break instruction exception - code 80000003 (first chance) eax=7ffde000 ebx=00000000 ecx=00000000 edx=772bd23d esi=00000000 edi=00000000 eip=77253540 esp=006ff8d0 ebp=006ff8fc iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 ntdll!DbgBreakPoint: 77253540 cc int 3 0:001> !htrace -------------------------------------- Handle = 0x00000080 - CLOSE Thread ID = 0x000017dc, Process ID = 0x0000130c0x7726491c: ntdll!ZwClose+0x0000000c 0x75476b1c: KERNELBASE!CloseHandle+0x0000002d 0x76c2057f: kernel32!CloseHandleImplementation+0x0000003f *** WARNING: Unable to verify checksum for G:\W7Documents\Visual Studio 6.0\Projects\HLeak\Debug\HLeak.exe 0x01201afb: HLeak!wmain+0x0000032b 0x01202b68: HLeak!__tmainCRTStartup+0x000001a8 0x012029af: HLeak!wmainCRTStartup+0x0000000f 0x76c21114: kernel32!BaseThreadInitThunk+0x0000000e 0x7727b3f5: ntdll!__RtlUserThreadStart+0x00000070 0x7727b3c8: ntdll!_RtlUserThreadStart+0x0000001b -------------------------------------- ……省略N多行信息…… -------------------------------------- Handle = 0x00000030 - OPEN Thread ID = 0x000017dc, Process ID = 0x0000130c0x77264b7c: ntdll!NtCreateThreadEx+0x0000000c 0x7547bd01: KERNELBASE!CreateRemoteThreadEx+0x00000161 0x76c227bd: kernel32!CreateThreadStub+0x00000020 0x01201a5a: HLeak!wmain+0x0000028a 0x01202b68: HLeak!__tmainCRTStartup+0x000001a8 0x012029af: HLeak!wmainCRTStartup+0x0000000f 0x76c21114: kernel32!BaseThreadInitThunk+0x0000000e 0x7727b3f5: ntdll!__RtlUserThreadStart+0x00000070 0x7727b3c8: ntdll!_RtlUserThreadStart+0x0000001b-------------------------------------- Parsed 0x158 stack traces. Dumped 0x158 stack traces.

如何調試?
看起來輸出信息過多,如果要一個一個去看哪些句柄沒有CLOSE,那樣工作量太大了。我們可以通過在Windbg中輸入”!htrace -diff”來自動篩選出沒有CLOSE的句柄的棧回溯信息:

0:001> !htrace -diff Handle tracing information snapshot successfully taken. 0x158 new stack traces since the previous snapshot. Ignoring handles that were already closed... Outstanding handles opened since the previous snapshot: -------------------------------------- Handle = 0x000003a4 - OPEN Thread ID = 0x000012bc, Process ID = 0x0000130c0x772651ec: ntdll!ZwOpenProcessToken+0x0000000c 0x7547748f: KERNELBASE!OpenProcessToken+0x00000014 0x0120237e: HLeak!CServer::GetToken+0x0000007e 0x01201da9: HLeak!CServer::GetSID+0x00000039 0x012015d3: HLeak!ThreadWorker+0x000000c3 0x76c21114: kernel32!BaseThreadInitThunk+0x0000000e 0x7727b3f5: ntdll!__RtlUserThreadStart+0x00000070 0x7727b3c8: ntdll!_RtlUserThreadStart+0x0000001b -------------------------------------- ……省略N多行信息…… -------------------------------------- Handle = 0x0000003c - OPEN Thread ID = 0x0000168c, Process ID = 0x0000130c0x772649fc: ntdll!NtCreateEvent+0x0000000c 0x772495d7: ntdll!RtlpCreateCriticalSectionSem+0x0000001a 0x772495ad: ntdll!RtlpWaitOnCriticalSection+0x00000074 0x7724fb56: ntdll!RtlEnterCriticalSection+0x00000150 0x7727b479: ntdll!LdrpInitializeThread+0x000000c6 0x7727b298: ntdll!_LdrpInitialize+0x000001ad 0x7727b2c5: ntdll!LdrInitializeThunk+0x00000010 -------------------------------------- Displayed 0x68 stack traces for outstanding handles opened since the previous snapshot.

可以通過這些信息來幫助對句柄泄漏的調試過程。

句柄泄漏回避策略

使用RAII(Resource Acquisition Is Initialization)策略,這個就不多說了,STL里面的auto_ptr就使用了這樣了的策略。


http://www.programlife.net/handle-leak-debug-skill.html

總結

以上是生活随笔為你收集整理的句柄泄漏调试经验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男人的影院 | 最新欧美大片 | 麻豆国产视频 | 国内成人av | 91天堂素人| 丁香一区二区三区 | 精品免费观看 | 青青草手机视频在线观看 | 在线黄色免费网站 | 97久久久久久久 | 欧美精品欧美精品系列 | 亚洲熟妇丰满大屁股熟妇 | 欧美brazzers| 欧美丰满老妇 | 一区二区三区欧美精品 | 成人做爰免费视频免费看 | 在线成人毛片 | 午夜激情亚洲 | 最新日本中文字幕 | 污黄啪啪网 | 日本美女动态图 | 国产第5页 | 久久综合精品国产二区无码不卡 | 成人手机在线播放 | 姑娘第5集高清在线观看 | a级性生活视频 | a级片一区二区 | 日韩免费小视频 | 欧美第二区 | 久久久精品网 | 精品国产乱码久久久久夜深人妻 | 最近高清中文在线字幕在线观看 | 处破痛哭a√18成年片免费 | 日韩久久久久久 | 国产精选91| 狠狠激情 | 黄色片一级 | 高潮毛片7777777毛片 | 国产区视频在线 | 久久久久久久久久免费 | 91黄瓜| 91色视频在线观看 | 亚洲第1页 | 日韩成人在线影院 | 日韩精品免费在线 | 一级片aaaaa| 日韩少妇毛片 | 美国免费高清电影在线观看 | gogo亚洲国模私拍人体 | 国产剧情久久 | 在线观看亚洲国产 | 国产呻吟av | 无遮挡aaaaa大片免费看 | 无码人妻精品一区二区三区99日韩 | 巨乳美女被爆操 | 在线资源站 | videos另类灌满极品另类 | 免费观看黄色av | 国产精品资源在线 | 精品视频在线观看一区二区 | 成人在线观看h | 色吧av| 在线 日本 制服 中文 欧美 | 久久视频中文字幕 | 性高潮免费视频 | 97久久人澡人人添人人爽 | 男女做爰猛烈刺激 | 国内外免费激情视频 | 国产精品国产三级国产专区53 | 国产精品久久精品三级 | 国产区二区 | 91一区二区三区在线观看 | 5566在线| 91美女片黄 | 日本国产一级片 | 极品销魂美女一区二区三区 | 亚洲av成人无码久久精品 | 日本japanese丰满白浆 | 国产原创av在线 | 2级黄色片 | 禁止18在线观看 | 亚洲视频精品在线观看 | 天码人妻一区二区三区在线看 | www嫩草 | 国产成人综合久久 | 国产又粗又猛视频免费 | 极品美女无套呻吟啪啪 | www.精品在线 | 欧美精品xx| 欧美性开放视频 | 欧美成人手机在线视频 | 三级在线观看网站 | 久久久久99精品成人片 | 天天躁夜夜躁av天天爽 | 婷婷久久久久久 | 狠狠躁18三区二区一区 | 欧美一区二区三区激情视频 | 波多野结衣在线免费视频 | 另类小说五月天 |