• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿(mǎn)街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Umdhtools.exe: 如何使用 umdh.exe 來(lái)查找內(nèi)存泄漏

            注意:這篇文章是由無(wú)人工介入的自動(dòng)的機(jī)器翻譯系統(tǒng)翻譯完成。這些文章是微軟為不懂英語(yǔ)的用戶(hù)提供的, 以使他們能夠理解這些文章的內(nèi)容。微軟不保證機(jī)器翻譯的正確度,也不對(duì)由于內(nèi)容的誤譯或者客戶(hù)對(duì)它的使用所引起的任何直接的, 或間接的可能的問(wèn)題負(fù)責(zé)。
            文章編號(hào) : 268343
            最后修改 : 2006年5月30日
            修訂 : 7.1

            概要

            用戶(hù)模式轉(zhuǎn)儲(chǔ)堆 (UMDH) 實(shí)用程序與操作系統(tǒng)來(lái)分析 Windows 堆分配對(duì)特定進(jìn)程。 此工具和其他工具與其, 關(guān)聯(lián)是主要針對(duì) Windows 2000 和 WindowsXP。 單擊 播放 按鈕以查看此流式媒體演示。

            <ltThe embedded streaming media event requires Microsoft Windows Media Player to view.>gt

            If you have problems viewing this video, click here.

            更多信息

            使用 UMDH 之前

            如果您認(rèn)為您遇到內(nèi)存泄漏, 應(yīng)注意, 內(nèi)存泄漏可能不它們似乎什么。 您可能發(fā)現(xiàn)內(nèi)存泄漏是不滿(mǎn)足內(nèi)存泄漏, 但是性能增強(qiáng)。 例如, MicrosoftJet 數(shù)據(jù)庫(kù)引擎會(huì)消耗大量?jī)?nèi)存因?yàn)樗鼨z索數(shù)據(jù)并寫(xiě)入緩存 256 - MB 計(jì)算機(jī)上 (最多 128 MB)。 緩存允許 Jet 引擎以獲得快速讀和寫(xiě)提前緩沖。

            要確定是否是一個(gè)進(jìn)程遇到內(nèi)存泄漏, 使用 Windows 性能監(jiān)視器 (Perfmon.exe) 并為應(yīng)用程序進(jìn)程類(lèi)別下監(jiān)視專(zhuān)用字節(jié)。 專(zhuān)用字節(jié)是總內(nèi)存, 進(jìn)程已分配, 但不是與其他進(jìn)程共享。 注意這是不同于 VirtualBytes, 即有趣來(lái)監(jiān)視。 虛擬字節(jié)是以字節(jié)表示的虛擬地址空間, 進(jìn)程使用當(dāng)前大小。 應(yīng)用程序可泄漏虛擬內(nèi)存, 但可能沒(méi)有看到分配專(zhuān)用字節(jié)中差別。 如果看不到當(dāng)監(jiān)視專(zhuān)用字節(jié), 但懷疑仍然運(yùn)行用盡了內(nèi)存, 增加內(nèi)存監(jiān)視虛擬字節(jié)以查看備份虛擬內(nèi)存是否正在使用。 有關(guān)檢測(cè)內(nèi)存泄漏, 附加信息請(qǐng)參閱以下 Microsoft Developer Network (MSDN) Web 站點(diǎn)上 " 查找 Leaks 和瓶頸與 WindowsNT PerfMon COM 對(duì)象 " 文章:
            http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnperfmo/html/perfmon.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnperfmo/html/perfmon.asp)
            要確保應(yīng)用程序, 是泄漏內(nèi)存, 可疑代碼放在循環(huán)與許多迭代, 并然后監(jiān)視對(duì)任何提高的內(nèi)存和虛擬專(zhuān)用字節(jié)。 觀看以確保不的專(zhuān)用字節(jié)和虛擬字節(jié)數(shù)不最終保持相同, 并且停止數(shù)增加。 如果沒(méi)有內(nèi)存增加, 停止時(shí)間點(diǎn)看不到內(nèi)存泄漏但更可能, 到緩存, 增長(zhǎng)至其最大尺寸 (例如, 它并不繼續(xù)到 climb 無(wú)限)。

            如果您決定使用 UMDH 之前,, 您看到內(nèi)存泄漏, 請(qǐng)按照下列步驟:
            1.安裝 UMDH 實(shí)用程序。
            2.設(shè)置要安裝 UMDH 文件夾 PATH 系統(tǒng)環(huán)境變量。
            3.將 _ NT _ SYMBOL _ PATH 環(huán)境變量設(shè)置為 Microsoft 符號(hào)服務(wù)器路徑以便 UMDH 可以找到調(diào)試符號(hào)文件。
            UMDH 工具是隨 DebuggingToolsforWindows 產(chǎn)品下面的 Microsoft Web 站點(diǎn):
            http://www.microsoft.com/whdc/devtools/ddk/default.mspx (http://www.microsoft.com/whdc/devtools/ddk/default.mspx)
            下載和安裝實(shí)用程序, 并將 PATH 系統(tǒng)環(huán)境變量到路徑其中已安裝調(diào)試工具。

            使用 UMDH 之前, 必須安裝用于組成應(yīng)用程序和操作系統(tǒng)正確調(diào)試符號(hào)。 用于 MicrosoftSymbolServer 獲取調(diào)試符號(hào)對(duì)于 Microsoft 組件。 有關(guān) MicrosoftSymbolServer, 請(qǐng)單擊文章編號(hào)以查看 Microsoft 知識(shí)庫(kù)中相應(yīng):
            311503 (http://support.microsoft.com/kb/311503/EN-US/) 使用 Microsoft 符號(hào)服務(wù)器來(lái)獲取調(diào)試符號(hào)文件
            UMDH 嘗試通過(guò)使用 _ NT _ SYMBOL _ PATH 環(huán)境變量查找符號(hào)文件。 命令以從命令提示符設(shè)置路徑可能與以下類(lèi)似:
            設(shè)置 _ NT _ SYMBOL _ PATH = SRV c:\LocalSymbolCache *
            其他有關(guān)設(shè)置符號(hào)調(diào)試信息, 請(qǐng)參閱本文中后面 " 調(diào)試符號(hào) " 部分。

            在完成這些步驟, 您就可以使用 UMDH 實(shí)用程序。

            與 UMDH 轉(zhuǎn)儲(chǔ)捕獲堆

            UMDH 是實(shí)用工具, 轉(zhuǎn)儲(chǔ)堆分配的進(jìn)程信息。 此信息包括調(diào)用堆棧用于每個(gè)分配、 次數(shù), 通過(guò)調(diào)用該堆棧, 進(jìn)行分配和的消耗, 通過(guò)調(diào)用該堆棧字節(jié)數(shù)。 例如:
            00005320 bytes in 0x14 allocations (@ 0x00000428) by: BackTrace00053
                       ntdll!RtlDebugAllocateHeap+0x000000FD
                       ntdll!RtlAllocateHeapSlowly+0x0000005A
                       ntdll!RtlAllocateHeap+0x00000808
                       MyApp!_heap_alloc_base+0x00000069
                       MyApp!_heap_alloc_dbg+0x000001A2
                       MyApp!_nh_malloc_dbg+0x00000023
                       MyApp!_nh_malloc+0x00000016
                       MyApp!operator new+0x0000000E
                       MyApp!LeakyFunc+0x0000001E
                       MyApp!main+0x0000002C
                       MyApp!mainCRTStartup+0x000000FC
                       KERNEL32!BaseProcessStart+0x0000003D
            				
            UMDH 輸出顯示, 沒(méi)有 21280 (0x5320) 從調(diào)用堆棧分配字節(jié)總數(shù)。 從 20 21280 字節(jié)被分配單獨(dú)分配的 1064 字節(jié) (0x428) (0 x 14)。 標(biāo)識(shí)符是 BackTrace00053 提供調(diào)用堆棧。

            要生成轉(zhuǎn)儲(chǔ)文件的堆分配, 您必須使用 Gflags.exe 實(shí)用程序, 也是隨 DebuggingToolsforWindows 產(chǎn)品, 來(lái)讓操作系統(tǒng)知道您想要跟蹤分配內(nèi)核。

            假設(shè)您要為 Notepad.exe 轉(zhuǎn)儲(chǔ) heap(s) 內(nèi)容。 必須首先啟用堆棧跟蹤獲取用于對(duì)要測(cè)試該應(yīng)用程序。 默認(rèn)情況下, 不啟用此功能。 要啟用此功能命令是如下:
            gflags notepad.exe + ust - i
            命令不啟用堆棧跟蹤為進(jìn)程到已經(jīng)運(yùn)行, 但使堆棧跟蹤對(duì)于所有將來(lái)執(zhí)行是 Notepad.exe。 通過(guò) GFLAGS 用戶(hù)界面 (不帶任何參數(shù)以獲得用戶(hù)界面運(yùn)行 Gflags.exe) 或者, 您可設(shè)置標(biāo)志。 使用 - ust 選項(xiàng)對(duì)于 gflags 以禁用堆棧跟蹤時(shí), 調(diào)試已完成。

            當(dāng)您通過(guò) Gflags.exe, 圖像標(biāo)志設(shè)并且設(shè)置調(diào)試符號(hào), 您就可以啟動(dòng)記事本, 使用 UMDH (應(yīng)用)。 啟動(dòng)程序后, 必須確定進(jìn)程 ID (PID) 的只啟動(dòng)記事本進(jìn)程。 對(duì)于此命令是如下:
            tlist
            您可以找到從輸出 TLIST 應(yīng)用程序的 PID。 PID 信息也可獲得從任務(wù)管理器。 假定對(duì)于記事本過(guò)程, 您只啟動(dòng) PID 是 124。 可使用 UMDH 來(lái)獲取堆轉(zhuǎn)儲(chǔ)使用以下命令:
            umdh - p 124 個(gè) - f:notepad124.log:
            結(jié)果 : Notepad124.log 文件中有完整堆的 Notepad 進(jìn)程轉(zhuǎn)儲(chǔ)。 此文件顯示所有所做的分配和 callstacks 其中進(jìn)行分配。

            使用 umdh.exe 來(lái)比較 UMDH 日志

            如果不關(guān)心查找內(nèi)存泄漏, UMDH 日志文件包含對(duì)進(jìn)程, 堆的當(dāng)前狀態(tài)寶貴信息時(shí)可能會(huì)更重要來(lái)比較的兩個(gè)日志輸出和了解哪些調(diào)用堆棧已看到大增長(zhǎng)兩轉(zhuǎn)儲(chǔ)文件之間。 Umdh.exe 實(shí)用程序幫助比較兩 UMDH 日志以提供分析之間差。 一旦有兩個(gè)日志捕獲不同間隔, 可再使用以下命令:
            UMDH dh1.log dh2.log > cmp12.txt
            - 或 -
            UMDH -d dh1.log dh2.log > cmp12.txt
            - d 命令行選項(xiàng)通知 UMDH 以在十進(jìn)制代替十六進(jìn)制顯示。 命令的輸出比較差異的分配之間兩個(gè)日志并提供是類(lèi)似于以下信息:
            + 5320 (f110 - 9df0) = = 5320 3a allocs BackTrace00053 總數(shù)增加
            對(duì)于每 BackTrace, UMDH 日志文件中沒(méi)有兩個(gè)日志文件之間進(jìn)行比較。 本例說(shuō)明最后一個(gè)日志文件 UMDH 命令行中指定有 0xF110 對(duì)于相同 BackTrace 調(diào)用 (堆棧) 分配字節(jié)分配 UMDH 命令行中第一個(gè)日志具有 0x9DF0 時(shí)字節(jié) UMDH 命令行中第一個(gè)日志具有 0x9DF0 時(shí)分配字節(jié)對(duì)于同一 BackTrace (調(diào)用堆棧) 分配字節(jié)。 " 5320 " 是分配的字節(jié)數(shù)中差別。 此例, 沒(méi)有 0x5320 多字節(jié)時(shí)間之間分配兩日志被捕獲。 字節(jié)來(lái)自調(diào)用堆棧, 由 " BackTrace00053 "。

            下一步是要了解什么是該 backtrace 中。 如果打開(kāi)二日志文件和搜索 BackTrace00053 , 可能發(fā)現(xiàn)內(nèi)容, 類(lèi)似于以下內(nèi)容:
            00005320 bytes in 0x14 allocations (@ 0x00000428) by: BackTrace00053
                       ntdll!RtlDebugAllocateHeap+0x000000FD
                       ntdll!RtlAllocateHeapSlowly+0x0000005A
                       ntdll!RtlAllocateHeap+0x00000808
                       MyApp!_heap_alloc_base+0x00000069
                       MyApp!_heap_alloc_dbg+0x000001A2
                       MyApp!_nh_malloc_dbg+0x00000023
                       MyApp!_nh_malloc+0x00000016
                       MyApp!operator new+0x0000000E
                       MyApp!LeakyFunc+0x0000001E
                       MyApp!main+0x0000002C
                       MyApp!mainCRTStartup+0x000000FC
                       KERNEL32!BaseProcessStart+0x0000003D
            				
            當(dāng)您查看調(diào)用堆棧, 您可以看到, LeakyFunc 函數(shù)分配內(nèi)存通過(guò) VisualC++ 運(yùn)行時(shí)庫(kù)運(yùn)算符新函數(shù)。 如果發(fā)現(xiàn), 分配的數(shù)增大如采取多轉(zhuǎn)儲(chǔ)文件, 您可能斷定不被釋放內(nèi)存。

            啟用堆棧跟蹤

            UMDH 日志中最重要信息是堆棧跟蹤的堆分配。 您可以分析地驗(yàn)證如果進(jìn)程堆內(nèi)存泄漏。 默認(rèn)情況下, 這些堆棧跟蹤不獲取。 您可啟用此功能每個(gè)進(jìn)程或系統(tǒng)級(jí)。 使用以下命令以啟用堆棧跟蹤系統(tǒng)級(jí):
            gflags -r + ust
            此命令后重新啟動(dòng)計(jì)算機(jī)。 有關(guān)每個(gè)進(jìn)程啟用, 命令是如下:
            gflags APPNAME + ust - i
            其中 APPNAME 是包括擴(kuò)展名 (例如, Services.exe, Lsass.exe) 可執(zhí)行的文件名。 命令不啟用堆棧跟蹤為進(jìn)程已運(yùn)行。 因此, 對(duì)于進(jìn)程, 無(wú)法重新 (用于示例、 服務(wù)、 lsass、 winlogon), 您必須重新啟動(dòng)測(cè)試計(jì)算機(jī)。

            使用以下命令以驗(yàn)證哪些設(shè)置已設(shè)置系統(tǒng)級(jí)或特定進(jìn)程: 系統(tǒng)范圍:: 系統(tǒng)范圍:
            gflags - r
            特定進(jìn)程:
            gflags APP - 名稱(chēng) - i
            默認(rèn)情況下, 大堆棧跟蹤深度是 16。 如果要查看深 callstacks, 可以通過(guò)運(yùn)行 GFLAGS 增加此。 單擊以選中 系統(tǒng)注冊(cè)表 , 然后鍵入新深度 Max. 堆棧跟蹤捕獲深度 編輯控件中。 單擊 應(yīng)用 , 并重新啟動(dòng)計(jì)算機(jī)。
            要點(diǎn) : 如果正在使用 Windows NT 4.0 Service Pack 6, 您必須使用 Umdh_nt4.exe, 代替 Umdh.exe, 并且您必須使用 gflags - r 命令來(lái)設(shè)置系統(tǒng)級(jí)堆棧跟蹤。 請(qǐng)確保您重新啟動(dòng)計(jì)算機(jī)。 WindowsNT 版本 4 上每流程基礎(chǔ)上無(wú)效 Umdh_nt4 堆棧跟蹤。 它必須為整個(gè)系統(tǒng)設(shè)置。

            調(diào)試符號(hào)

            最重要步驟以使用 UMDH 之一是以確保您具有好符號(hào)文件 (.dbg 或 .pdb 文件) 以獲得良好堆棧跟蹤。 至少, 您需要 Kernel32.dbg 和 Ntdll.dbg 符號(hào)文件。 您可以獲得其他調(diào)試符號(hào), 您可能需要與您了解多關(guān)于哪些組件泄漏內(nèi)存。 有關(guān)如何獲取 Microsoft 組件, 調(diào)試符號(hào)文件請(qǐng)單擊文章編號(hào)以查看 Microsoft 知識(shí)庫(kù)中相應(yīng):
            311503 (http://support.microsoft.com/kb/311503/EN-US/) INFO: 使用 Microsoft 符號(hào)服務(wù)器來(lái)獲取調(diào)試符號(hào)文件
            有關(guān)如何使用 MicrosoftSymbolServer 以及如何獲取 Windows 符號(hào)程序包, 請(qǐng)?jiān)L問(wèn) Microsoft Web 站點(diǎn):
            http://www.microsoft.com/whdc/devtools/ddk/default.mspx (http://www.microsoft.com/whdc/devtools/ddk/default.mspx)
            當(dāng)您生成組件與 VisualC++, 值得您沒(méi)有將程序數(shù)據(jù)庫(kù)用于編輯和繼續(xù)選擇用于 C++ 編譯器選項(xiàng)。 相反, 選擇程序數(shù)據(jù)庫(kù)。 將符號(hào)路徑, 初始化到路徑用于 _ NT _ SYMBOL _ PATH 環(huán)境變量。 您可以使用 Microsoft 符號(hào)服務(wù)器來(lái)獲取用于 Microsoft 組件符號(hào)。
            311503 (http://support.microsoft.com/kb/311503/EN-US/) INFO: 使用 Microsoft 符號(hào)服務(wù)器來(lái)獲取調(diào)試符號(hào)文件
            請(qǐng)按照下列步驟來(lái)設(shè)置 _ NT _ SYMBOL _ PATH 環(huán)境變量:
            1.在控制面板, 雙擊 系統(tǒng)
            2.單擊 高級(jí) 選項(xiàng)卡, 然后再單擊 環(huán)境變量。
            也可以在命令窗口運(yùn)行 UMDH 之前設(shè)置 _ NT _ SYMBOL _ PATH 環(huán)境變量。

            注意 : 也包括到 PDB 對(duì)組件的應(yīng)用程序路徑。 例如, _ NT _ SYMBOL _ PATH 路徑設(shè)置為以下:
            SRV*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\myapplicationssymbols
            第第一部分對(duì)此路徑指向 MicrosoftSymbolServer 并指出 c:\symbols 文件夾中, 將下載符號(hào)使用。 分號(hào)后面部分是到 PDB 文件 (符號(hào)文件) 專(zhuān)門(mén)為泄漏應(yīng)用程序路徑。

            調(diào)用 UMDH

            只需要命令行參數(shù)對(duì)于 UMDH 是 - p 選項(xiàng), 指定將從中獲取堆轉(zhuǎn)儲(chǔ)進(jìn)程的 PID。 通過(guò)使用任務(wù)管理器或 Tlist.exe 程序獲得 PID。 轉(zhuǎn)日志為類(lèi)似于以下, 命令將被儲(chǔ)到標(biāo)準(zhǔn)輸出:
            umdh - p PID:
            向標(biāo)準(zhǔn)錯(cuò)誤, UMDH 還顯示各種信息性消息并因此如果您不執(zhí)行重定向其, 與實(shí)際日志混合它。 以收集 UMDH 信息性消息文件, 中使用以下命令:
            umdh - p PID 2>umdh.msg:
            如果要收集日志是由文件, 中 UMDH 轉(zhuǎn)儲(chǔ), 使用下列命令之一:
            umdh - p PID: umdh.log
            - 或 -
            umdh f:umdh.log PID - - p:
            這些命令是等效。

            通過(guò) UMDH 獲得默認(rèn)日志包含枚舉是堆消費(fèi)者, 按分配計(jì)數(shù)排序。 如果還需要所有與其相應(yīng)堆棧跟蹤, 分配塊的轉(zhuǎn)儲(chǔ)文件用于調(diào)試目的, - d 選項(xiàng)用于:
            umdh - p PID - d:
            如果使用此命令, 您可能看到以下 UMDH 日志文件中:
            對(duì)于跟蹤 BackTrace00046 分配 005F69A0 005F6150:
            這些是用于調(diào)用該堆棧分配的內(nèi)存地址。 如果將調(diào)試器附加到進(jìn)程, 您可轉(zhuǎn)儲(chǔ)內(nèi)存要查看哪些已分配這些地址上的內(nèi)容。

            如果日志包含太多信息, 就可以?xún)H限于那些具有分配大用戶(hù)計(jì)數(shù)超過(guò)特定閾值。 使用以下命令:
            umdh - p PID - t: THRESHOLD:
            所有命令行選項(xiàng) (例如, - p、 - f, - t、 - d) 同時(shí)指定按任何順序。 下面是更難命令行示例:
            umdh - p 123: 1000 - f:umdh.log - d - t:
            此命令將轉(zhuǎn)儲(chǔ)堆對(duì)于過(guò)程與 PID 123 到 Umdh.log 文件。 它轉(zhuǎn)儲(chǔ)只堆棧跟蹤, 帳戶(hù)超過(guò) 1000 分配和它的堆塊通過(guò)每個(gè)堆棧跟蹤分配地址還轉(zhuǎn)儲(chǔ)。

            另一個(gè)有用 UMDH 選項(xiàng)是 - l 選項(xiàng)。 這導(dǎo)致要盡可能調(diào)用堆棧中打印文件和行號(hào)。

            解釋 UMDH 輸出

            如果您重定向到文件日志 (PID -: umdh,) 內(nèi)容是類(lèi)似于以下, 從運(yùn)行 Notepad 進(jìn)程已獲得它 - p: f:umdh.log
            UMDH: Logtime 2000-06-28 10:54 - Machine=MYMachine - PID=704
               *********** Heap 00270000 Information ********************
                   Flags: 58000062
                   Number Of Entries: 87
                   Number Of Tags: <unknown>
                   Bytes Allocated: 00008DF0
                   Bytes Committed: 0000A000
                   Total FreeSpace: 00001210
                   Number of Virtual Address chunks used: 1
                   Address Space Used: <unknown>
                   Entry Overhead: 8
                   Creator:  (Backtrace00007)
                       ntdll!RtlDebugCreateHeap+0x00000196
                       ntdll!RtlCreateHeap+0x0000023F
                       ntdll!LdrpInitializeProcess+0x00000369
                       ntdll!LdrpInitialize+0x0000028D
                       ntdll!KiUserApcDispatcher+0x00000007
               *********** Heap 00270000 Hogs ********************
               000001A0 bytes in 0x4 allocations (@ 0x00000068) by: BackTrace00031
                       ntdll!RtlDebugAllocateHeap+0x000000FB
                       ntdll!RtlAllocateHeapSlowly+0x0000005B
                       ntdll!RtlAllocateHeap+0x00000D81
                       ntdll!LdrpAllocateDataTableEntry+0x00000039
                       ntdll!LdrpMapDll+0x000002A4
                       ntdll!LdrpLoadImportModule+0x0000010D
                       ntdll!LdrpWalkImportDescriptor+0x0000008B
                       ntdll!LdrpLoadImportModule+0x0000011D
                       ntdll!LdrpWalkImportDescriptor+0x0000008B
                       ntdll!LdrpLoadImportModule+0x0000011D
                       ntdll!LdrpWalkImportDescriptor+0x0000008B
                       ntdll!LdrpInitializeProcess+0x000009DC
                       ntdll!LdrpInitialize+0x0000028D
                       ntdll!KiUserApcDispatcher+0x00000007
            
               000001A0 bytes in 0x4 allocations (@ 0x00000068) by: BackTrace00034
                       ntdll!RtlDebugAllocateHeap+0x000000FB
                       ntdll!RtlAllocateHeapSlowly+0x0000005B
                       ntdll!RtlAllocateHeap+0x00000D81
                       ntdll!LdrpAllocateDataTableEntry+0x00000039
                       ntdll!LdrpMapDll+0x000002A4
                       ntdll!LdrpLoadImportModule+0x0000010D
                       ntdll!LdrpWalkImportDescriptor+0x0000008B
                       ntdll!LdrpLoadImportModule+0x0000011D
                       ntdll!LdrpWalkImportDescriptor+0x0000008B
                       ntdll!LdrpLoadImportModule+0x0000011D
                       ntdll!LdrpWalkImportDescriptor+0x0000008B
                       ntdll!LdrpLoadImportModule+0x0000011D
                       ntdll!LdrpWalkImportDescriptor+0x0000008B
                       ntdll!LdrpInitializeProcess+0x000009DC
                       ntdll!LdrpInitialize+0x0000028D
                       ntdll!KiUserApcDispatcher+0x00000007
            				
            日志包含的進(jìn)程中每個(gè)堆轉(zhuǎn)儲(chǔ)。 在本示例, 日志開(kāi)頭 270000 地址處堆。 對(duì)于堆, 幾全局計(jì)數(shù)器后日志包含按減少排序順序的大多數(shù)分配負(fù)責(zé)堆棧跟蹤轉(zhuǎn)儲(chǔ)。 比較不同時(shí)間, 上所使用的內(nèi)存動(dòng)態(tài)時(shí), 可推斷進(jìn)程中發(fā)生什么, 如果任何堆使用它類(lèi)似于泄漏。

            使用 UMDH 時(shí), 您可能會(huì)遇到問(wèn)題

            因?yàn)槲磫⒂枚褩8櫚l(fā)生常見(jiàn)錯(cuò)誤使用 UMDH 時(shí)。 也, 用于 Ntdll.dll 正確符號(hào)使 UMDH 無(wú)法運(yùn)行。 對(duì)于其他符號(hào)文件, UMDH 運(yùn)行但日志文件包含堆棧跟蹤沒(méi)有函數(shù)名稱(chēng), 但而具有內(nèi)部模塊相對(duì)地址。 遠(yuǎn)程三錯(cuò)誤指定錯(cuò)誤 PID。 當(dāng)您嘗試為沒(méi)有啟用堆棧跟蹤過(guò)程運(yùn)行 UMDH 產(chǎn)生以下錯(cuò)誤信息:
            C:\>umdh = MyMachine - PID 1140 UMDH = 1140 連接正在完成模塊枚舉 logtime 06 28 2000 - - - p:: 12:43 - 計(jì)算機(jī)。 SymGetSymFromName(process, ntdll!RtlpStackTraceDataBase, xxx) 失敗, LastError = 126 ntdll UmdhGetAddrFromName 未能找到堆棧跟蹤 DB 指針) RtlpStackTraceDataBase ! (。 ntdll.dll 符號(hào)不正確 ; 我們必須能夠看到非導(dǎo)入符號(hào)。
            使用以下命令來(lái)復(fù)查過(guò)程, 您正在調(diào)查設(shè)置:
            gflags APPNAME - i
            您依賴(lài)于系統(tǒng)級(jí)堆棧跟蹤時(shí)使用以下命令:
            gflags - r
            這些命令顯示 flags 設(shè)置為應(yīng)用程序的列表。 注意如果是系統(tǒng)級(jí)堆棧跟蹤, 功能可能顯示為活動(dòng)但實(shí)際上不激活如果您找不重新啟動(dòng)計(jì)算機(jī)運(yùn)行 gflags -r + ust 命令, 后。 如果要了解具有啟用, 堆棧跟蹤每個(gè)應(yīng)用程序可查看以下注冊(cè)表項(xiàng)下 USTEnabled 項(xiàng):
            HKEY NT\CurrentVersion\Image 文件執(zhí)行選項(xiàng)
            如果 UMDH 具有啟用, 堆棧跟蹤進(jìn)程上運(yùn)行, 但由于您設(shè)置標(biāo)志, 不重新應(yīng)用日志中可能會(huì)收到以下消息:
            沒(méi)有用于此分配保存堆棧跟蹤 () 索引 = = 0
            如果您運(yùn)行不要設(shè)置正確符號(hào)路徑或符號(hào)不正確, 和運(yùn)行 UMDH, 日志中可能會(huì)收到錯(cuò)誤消息。 但是, 只出現(xiàn)錯(cuò)誤或誤導(dǎo) callstacks。 若要驗(yàn)證是否有正確符號(hào), 例如啟動(dòng)對(duì)進(jìn)程, NTSD 系統(tǒng)調(diào)試器:
            ntsd 記事本
            然后, 從調(diào)試器控制臺(tái), 運(yùn)行 LD 命令以加載符號(hào)信息對(duì)模塊和 LM 命令以模塊有加載其符號(hào)列表。 如果 LM 命令的輸出顯示導(dǎo)出符號(hào)加載, 符號(hào)是不好。 如果您有加載, PDB 符號(hào)符號(hào)是好。 如果指定錯(cuò)誤 PID 可能出現(xiàn)以下錯(cuò)誤信息:
            OpenProcess 失敗, LastError = 0x57

            從 VisualBasic 調(diào)用 UMDH

            最初可能有時(shí)用于轉(zhuǎn)儲(chǔ)隨著時(shí)間的日志數(shù)量因?yàn)樾孤┛赡懿缓苊黠@。 例如, 如果懷疑 Active Server Pages (ASP) Web 應(yīng)用程序, 是泄漏內(nèi)存, 它可能有助于出 shells, VisualBasic 中寫(xiě)入 UMDH COM 組件。 然后可從您的 ASP 頁(yè)調(diào)用該組件。

            下面是一些 VisualBasic 代碼調(diào)用 UMDH, 創(chuàng)建一個(gè)日志文件是基于當(dāng)前時(shí)間:
            Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
                  Public Function GetProcessID()
                  GetProcessID = GetCurrentProcessId()
                  End Function  
               .
               .
               .
                  Dim strTime As String
            
                  Dim sProcID As String
                  sProcID = GetProcessID()
                  strTime = "MYLOG_" & Format(Now(), "hhmm")
                 
                  Shell ("C:\UMDH\umdh -p:" & sProcID & " -f:d:\logs\" & strTime & ".txt")
            				

            使用 Windows NT 4.0 服務(wù)軟件包 6a UMDH (SP6a)

            Windows NT 4.0 上無(wú)效 UMDH 工具隨 DebuggingToolsforWindows 產(chǎn)品一起提供。 自解壓縮可執(zhí)行 (Umdhnt4tools.exe) 是隨本文并包含以下工具用于與 NT 4.0:
            ?Umdh_nt4.exe 和 Dbghelp.dll
            這是 UMDH 實(shí)用程序的 Windows NT 4.0 SP 6 版本。
            ?Dhcmp.exe
            此工具用于比較兩 UMDH 轉(zhuǎn)儲(chǔ)以確定其中可能內(nèi)存泄漏 occurrs。
            可用于從 Microsoft 下載中心下載下列文件:
            DownloadDownload Umdhnt4tools.exe now (http://download.microsoft.com/download/win2000srv/utility/1.0/nt45/en-us/umdhnt4tools.exe)
            August 28, 2002 發(fā)布日期:

            有關(guān)如何下載 Microsoft 支持文件, 請(qǐng)單擊下列文章編號(hào)以查看 Microsoft 知識(shí)庫(kù)中相應(yīng):
            119591 (http://support.microsoft.com/kb/119591/EN-US/) 如何從聯(lián)機(jī)服務(wù)獲取 Microsoft 支持文件
            此文件進(jìn)行病毒掃描 Microsoft。 Microsoft 使用最新病毒檢測(cè)軟件, 投遞文件日期上的可用。 文件存儲(chǔ)在安全增強(qiáng)型服務(wù)器有助于防止未經(jīng)授權(quán)更改對(duì)該文件。 文件夾, 置于 Umdh_nt4.exe 和 Dbghelp.dll 并再將它們首先在 PATH 環(huán)境變量。 使用 Umdh_nt4.exe 代替 UMDH。

            是運(yùn)行 Windows NT 4.0, 計(jì)算機(jī)上必須使用 Gflags.exe 來(lái)設(shè)置系統(tǒng)級(jí)堆棧跟蹤。 例如:
            gflags - r
            請(qǐng)確保您重新啟動(dòng)計(jì)算機(jī)。 WindowsNT 版本 4.0 上逐個(gè)進(jìn)程無(wú)效 Umdh_nt4 堆棧跟蹤。 設(shè)置對(duì)整個(gè)系統(tǒng)。

            與 UMDH UMDH_NT4 是, 它不比較日志文件。 例如, 您無(wú)法執(zhí)行以下操作:
            UMDH_NT4 dh1.log dh2.log > cmp12.txt
            而必須使用 Dhcmp.exe 工具所附帶本文。 類(lèi)似于以下命令:
            DHCMP dh1.log dh2.log > cmp12.txt

            這篇文章中的信息適用于:
            ? Microsoft Windows 2000 Server
            ? Microsoft Windows 2000 Advanced Server
            ? Microsoft Windows 2000 Professional Edition
            ? Microsoft Windows NT Server 4.0 Standard Edition
            ? Microsoft Windows NT Workstation 4.0 Developer Edition
            關(guān)鍵字:?
            kbdownload kbarttypeshowme kbfile kbgraphxlinkcritical kbhowto kbsample KB268343 KbMtzh kbmt
            Microsoft和/或其各供應(yīng)商對(duì)于為任何目的而在本服務(wù)器上發(fā)布的文件及有關(guān)圖形所含信息的適用性,不作任何聲明。 所有該等文件及有關(guān)圖形均"依樣"提供,而不帶任何性質(zhì)的保證。Microsoft和/或其各供應(yīng)商特此聲明,對(duì)所有與該等信息有關(guān)的保證和條件不負(fù)任何責(zé)任,該等保證和條件包括關(guān)于適銷(xiāo)性、符合特定用途、所有權(quán)和非侵權(quán)的所有默示保證和條件。在任何情況下,在由于使用或運(yùn)行本服務(wù)器上的信息所引起的或與該等使用或運(yùn)行有關(guān)的訴訟中,Microsoft和/或其各供應(yīng)商就因喪失使用、數(shù)據(jù)或利潤(rùn)所導(dǎo)致的任何特別的、

            posted on 2006-07-03 12:48 楊粼波 閱讀(2576) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 文章收藏

            99久久精品费精品国产一区二区| 久久免费香蕉视频| 无码久久精品国产亚洲Av影片| 综合人妻久久一区二区精品| 国产精品久久久久久| 国产一区二区三精品久久久无广告 | 亚洲精品无码专区久久久| 久久狠狠爱亚洲综合影院| 丰满少妇人妻久久久久久| 品成人欧美大片久久国产欧美| 精品久久久久久无码不卡| 久久夜色精品国产欧美乱| 曰曰摸天天摸人人看久久久| 国产精品久久久久蜜芽| 91亚洲国产成人久久精品| 国产成人无码精品久久久性色| 亚洲精品高清久久| 日本久久久久亚洲中字幕| 国产精品美女久久久免费| 久久亚洲AV成人无码电影| 久久综合一区二区无码| 久久精品国产99国产电影网 | 亚洲一本综合久久| 久久久久久久女国产乱让韩 | 久久婷婷五月综合色奶水99啪| 久久国产免费观看精品| 久久久久亚洲AV无码网站| 国产精品99久久久精品无码| 精品国产青草久久久久福利| 91久久精一区二区三区大全| 色婷婷综合久久久久中文一区二区| 久久精品国产精品亚洲| 国产精品狼人久久久久影院 | 久久国产乱子伦免费精品| 久久久亚洲裙底偷窥综合| 国产精品久久久久久久app| 性高朝久久久久久久久久| 亚洲精品NV久久久久久久久久| 久久久久国产一区二区| 久久国产视频99电影| 欧美久久一区二区三区|