使用偵錯工具和 Logexts.dll
開機記錄器的其中一種方式是啟動 CDB 或 WinDbg,並像往常一樣附加至使用者模式目標應用程式。 然後,使用 !logexts.logi 或 !logexts.loge 延伸模組命令。
這會在目前的中斷點插入程式碼,以跳至在目標應用程式進程中載入和初始化 Logexts.dll 的常式。 這稱為「將記錄器插入目標應用程式」。
因為此模組同時是偵錯工具擴充 DLL,而且插入目標應用程式的程式,所以實際上 Logexts.dll 執行兩個實例。 偵錯工具和目標實例 Logexts.dll 透過記憶體的共用區段進行通訊,其中包含輸出檔控制碼、目前的類別遮罩,以及記錄輸出緩衝區的指標。
附加至目標應用程式
如需將偵錯工具附加至目標應用程式的資訊,請參閱 使用 WinDbg 偵錯 User-Mode 進程 或使用 CDB 對 User-Mode 進程進行偵錯。
使用記錄器擴充功能命令
如需每個延伸模組的完整語法,請參閱其參考頁面。
!logexts.logi
將記錄器插入目標應用程式。 這會初始化記錄,但不會加以啟用。
!logexts.loge
啟用記錄。 如果未使用 !logexts.logi ,此延伸模組將會初始化,然後啟用記錄。
!logexts.logd
停用記錄。 這會導致所有 API 勾點都遭到移除,以允許程式自由執行。 COM 勾點不會移除,因為它們無法自動重新啟用。
!logexts.logo
顯示或修改輸出選項。 有三種類型的輸出可能:直接傳送至偵錯工具、文字檔或 .lgv 檔案的訊息。 .lgv 檔案包含的資訊比其他兩個還多;您可以使用 LogViewer來讀取。
如果您停用文字檔輸出,仍會建立大小為零的 .txt 檔案。 這可能會覆寫相同位置中先前儲存的文字檔。
!logexts.logc
顯示可用的 API 類別、控制將記錄的類別,以及不會記錄的類別,以及顯示包含在任何類別中的 API。
如果已停用類別,將會移除該類別中所有 API 的勾點,讓不再有任何效能額外負荷。 COM 勾點不會移除,因為它們無法自動重新啟用。
當您只對程式與 Windows 相關的特定互動類型感興趣時,啟用特定類別就很有用,例如檔案作業。 這會減少記錄檔大小,也會減少記錄器對進程執行速度的影響。
!logexts.logb
顯示或排清目前的輸出緩衝區。 作為效能考慮,只有在輸出緩衝區已滿時,才會將記錄輸出排清到磁片。 根據預設,緩衝區為 2144 個位元組。
由於緩衝區記憶體是由目標應用程式所管理,因此如果目標應用程式中發生存取違規或其他一些無法復原的錯誤,則不會自動將緩衝區寫入磁片上的記錄檔。 在這種情況下,您應該使用此命令手動將緩衝區排清到磁片,否則最近記錄的 API 可能不會出現在記錄檔中。
!logexts.logm
顯示或建立模組包含/排除清單。 通常最好只記錄從特定模組或一組模組進行的 API 呼叫。 為了方便進行,記錄器可讓您指定模組包含清單,或者指定模組排除清單。 例如,如果您只想要記錄來自一或兩個模組的呼叫,您會使用包含清單。 如果您想要記錄所有模組發出的呼叫,但模組清單簡短除外,您可以使用排除清單。 系統一律會排除模組 Logexts.dll 和 Kernel32.dll,因為不允許記錄器自行記錄。