指定模組和函式擁有者
!analyze和!owner副檔名會使用名為 triage.ini 的檔案,來判斷偵錯工具遇到的符號擁有者。
當您使用這些延伸模組時,函式或模組擁有者的身分識別會顯示在 「Followup」 一詞之後。
triage.ini 檔案是位於 Windows 偵錯工具安裝之 \triage 子目錄中的文字檔。 範例 triage.ini 檔案會包含在 Windows 套件的偵錯工具中。
警告 如果您在與目前版本相同的目錄中安裝 Windows 偵錯工具的更新版本,它會覆寫該目錄中的所有檔案,包括 triage.ini。 修改或取代範例 triage.ini 檔案之後,請將它的複本儲存至不同的目錄。 重新安裝偵錯工具之後,您可以複製預設版本的已儲存 triage.ini。
triage.ini 檔案的格式
雖然 triage.ini 檔案旨在協助您判斷已細分為偵錯工具的函式擁有者,但此檔案中的「擁有者」字串可以是任何可能協助您進行偵錯的專案。 字串可以是撰寫或維護程式碼的人員名稱。 或者,字串可以是有關您在模組或函式中發生錯誤時可以執行的簡短指示。
此檔案中的每個行都有下列語法。
Module[!Function]=Owner
您只能在模組或函式名稱結尾新增星號 (*) 。 如果它出現在其他地方,則會解譯為常值字元。
您無法在擁有者字串中新增空格。 如果擁有者字串中確實存在空格,則會忽略這些空格。
如需語法選項的詳細資訊,請參閱 特殊 triage.ini 語法。
下列範例顯示範例 triage.ini 檔案。
module1=Person1
module2!functionA=Person2
module2!functionB=Person3
module2!funct*=Person4
module2!*=Person5
module3!singleFunction=Person6
mod*!functionC=Person7
Triage.ini 和 !owner
當您將模組或函式名稱傳遞至 !owner 延伸模組時,偵錯工具會顯示 「Followup」 一字,後面接著模組或函式的擁有者名稱。
下列範例會使用先前的範例 triage.ini 檔案。
0:000> !owner module2!functionB
Followup: Person3
根據檔案,「Person3」 擁有module2!functionB,而 「Person4」 擁有module2!funct\ 。 這兩個字串都符合傳遞給 !owner的引數,因此會使用更完整的比對。
Triage.ini 和 !analyze
當您使用 !analyze 延伸模組時,偵錯工具會查看堆疊中的頂端錯誤框架,並嘗試判斷此框架中模組和函式的擁有者。 如果偵錯工具可以判斷擁有者,則會顯示擁有者資訊。
如果偵錯工具無法判斷擁有者,偵錯工具會傳遞至下一個堆疊框架,依此類故,直到偵錯工具判斷擁有者或堆疊完全檢查為止。
如果偵錯工具可以判斷擁有者,則擁有者名稱會顯示在 「Followup」 一詞後面。 如果偵錯工具在未尋找任何資訊的情況下搜尋整個堆疊,則不會顯示任何名稱。
下列範例會使用本主題稍早提供的範例 triage.ini 檔案。
假設堆疊上的第一個框架是 MyModule!someFunction。 偵錯工具在 triage.ini 檔案中找不到 MyModule 。 接下來,它會繼續到堆疊上的第二個框架。
假設第二個畫面是 module3!anotherFunction。 偵錯工具會看到 module3的專案,但此課程模組中沒有 另一個Function 的相符專案。 接下來,偵錯工具會繼續進行第三個畫面。
假設第三個畫面是 module2!functionC。 偵錯工具會先尋找完全相符的專案,但這類相符專案不存在。 然後偵錯工具會修剪函式名稱,並在 triage.ini 中探索 module2!funct\* 。 此比對會結束搜尋,因為偵錯工具會判斷擁有者是 「Person4」。
然後偵錯工具會顯示類似下列範例的輸出。
0:000> !analyze
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
Use !analyze -v to get detailed debugging information.
Probably caused by : module2 ( module2!functionC+15a )
Followup: Person4
---------
更完整的比對優先于較短的比對。 不過,模組名稱比對一律優先于函式名稱比對。 如果 module2!funct\* 尚未在此 triage.ini 檔案中,偵錯工具會選取 module2!\* 作為相符專案。 如果已移除 module2!funct\* 和 module2!\* , 則已選取 mod*!functionC 。
特殊 triage.ini 語法
如果您在模組名稱後面省略驚嘆號和函式名稱或新增 !\* ,則會指出該模組中的所有函式。 如果另外指定此模組內的函式,則會優先使用更精確的規格。
如果您使用 「default」 作為模組名稱或函式名稱,則相當於萬用字元。 例如, nt!\* 與 nt!default相同, 預設值 與 *!\*相同。
如果已建立相符專案,但字 忽略 會顯示在等號右邊 (=) ,偵錯工具會繼續到堆疊中的下一個框架。
您可以在擁有者名稱之前新增 last_ 或 maybe_ 。 當您執行 !analyze時,此前置詞會提供擁有者較少的優先順序。 偵錯工具會選擇堆疊上較低的明確比對,而非堆疊上較高 maybe_ 相符專案。 偵錯工具也會選擇堆疊上較低 maybe_ 比對,而非堆疊上較高 last_ 比對。
範例 triage.ini
Windows 套件的偵錯工具中包含範例 triage.ini 範本。 您可以新增您想要此檔案之任何模組和函式的擁有者。 如果您想要沒有全域預設值,請刪除此檔案開頭的 default=MachineOwner 行。