GFlags 命令概觀
如需如何安裝和尋找gflags.exe的一般資訊,請參閱 GFlags。
您可以交換使用 GFlags 命令和 全域旗標對話框 。
GFlags 命令使用方式
若要使用 GFlags,請在命令行輸入下列命令。
若要開啟 [GFlags] 對話框:
gflags
若要在登入中設定或清除全域旗標:
gflags /r [{+ | -}Flag [{+ | -}Flag...]]
若要設定或清除目前工作階段的全域旗標:
gflags /k [{+ | -}Flag [{+ | -}Flag...]]
若要設定或清除影像檔案的全域旗標:
gflags /i ImageFile [{+ | -}Flag [{+ | -}Flag...]]
gflags /i ImageFile /tracedb SizeInMB
設定或清除特殊集區功能 (Windows Vista 和更新版本)
gflags {/r | /k} {+ | -}spp {PoolTag | 0xSize}
啟用或停用物件參考追蹤功能 (Windows Vista 及更新版本)
gflags {/ro | /ko} [/p] [/i ImageFile | /t PoolTag;[PoolTag...]]
gflags {/ro | /ko} /d
若要啟用與設定頁面堆積驗證:
gflags /p /enable ImageFile [ /full [/backwards] | /random Probability | /size SizeStart SizeEnd | /address AddressStart AddressEnd | /dlls DLL [DLL...] ]
[/debug ["DebuggerCommand"] | /kdebug] [/unaligned] [/notraces] [/fault Rate [TimeOut]] [/leaks] [/protect] [/no_sync] [/no_lock_checks]
若要停用頁面堆積驗證:
gflags /p [/disable ImageFile] [/?]
若要顯示說明:
gflags /?
參數
旗
指定代表偵錯功能的三個字母縮寫 (FlagAbbr) 或十六進位值 (FlagHex)。 縮寫和十六進位值會列在 GFlags 旗標數據表中。
使用下列其中一種旗標格式:
格式 | 描述 |
---|---|
{+ | -}FlagAbbr |
會設定 (+) 或清除旗標縮寫所代表的旗標。 如果沒有加號 (+) 或減號 (-) 符號,命令就不會有任何作用。 |
[+ | -]FlagHex |
加入 (+) 或減去 旗標的十六進位值。 當其值包含在總和中時,就會設定旗標。 Add (+) 是預設值。 輸入代表單一旗標的十六進位值(不含 0x),或輸入多個旗標的十六進位值總和。 |
ImageFile
指定可執行文件的名稱,包括擴展名(例如,notepad.exe或mydll.dll)。
/r
登錄。 顯示或變更儲存在登錄中的全系統偵錯旗標。 這些設定會在您重新啟動 Windows 時生效,並持續有效,直到您變更這些設定為止。
沒有其他參數, gflags /r 會顯示登錄中設定的系統範圍旗標。
/k
核心旗標設定。 顯示或變更此會話的全系統偵錯旗標。 這些設定會立即生效,但在 Windows 關機時遺失。 這些設定會影響此命令完成之後啟動的進程。
沒有其他參數, gflags /k 會顯示針對目前會話設定的系統範圍旗標。
/我
圖像檔案設定。 顯示或變更特定進程的偵錯旗標。 這些設定會儲存在登錄中。 它們對於此程式的所有新實例都有效,而且在您變更這些實例之前,它們仍然有效。
沒有其他參數, gflags /i ImageFile 會顯示為指定行程設定的旗標。
/tracedb SizeInMB
設定進程之使用者模式堆疊追蹤資料庫的大小上限。 若要使用此參數, 您必須為進程設定建立使用者模式堆疊追蹤資料庫 (ust) 旗標。
SizeInMB 是整數,代表小數單位的 MB 數。 默認值為最小大小,8 MB;沒有大小上限。 若要還原為預設大小,請將 SizeInMB 設定為 0。
spp
(Windows Vista 和更新版本。設定或清除 特殊集區 功能。 如需範例,請參閱 範例 14:設定特殊集區。
PoolTag
(Windows Vista 和更新版本。指定特殊集區功能的集區標籤。 僅搭配 spp 旗標使用。
輸入 PoolTag 的四個字元模式,例如 Tag1。 它可以包含 嗎 ? (取代任何單一字元) 和 * (取代多個字元) 通配符。 例如,Fat* 或 Av?4。 集區標籤一律區分大小寫。
0x大小
(Windows Vista 和更新版本。指定特殊集區功能的大小範圍。 僅搭配 spp 旗標使用。 如需選取大小值的指引,請參閱特殊集區中的。
/ro
啟用、停用及顯示 登錄中的物件參考追蹤 設定。 若要讓此設定變更生效,您必須重新啟動 Windows。
如果沒有其他參數, /ro 會在登錄中顯示對象參考追蹤設定。
若要啟用物件參考追蹤,您必須在命令中包含至少一個集區標籤 (/t PoolTag) 或一個圖像檔案 (/i ImageFile)。 如需詳細資訊,請參閱 範例 15:使用對象參考追蹤。
下表列出使用 /ro 有效的子參數。
/t PoolTags |
將追蹤限制為具有指定集區標記的物件。 使用分號 (;) 來分隔標籤名稱。 輸入最多16個集區標籤。 輸入 PoolTags 的四個字元模式,例如 Tag1。 如果您指定多個集區標記,Windows 會追蹤具有任何指定集區標籤的物件。 如果您未指定任何集區標記,Windows 會追蹤映像所建立的所有物件。 |
/i ImageFile |
將追蹤限制為使用指定映像檔的進程所建立的物件。 您只能使用 /i 參數指定一個影像檔。 輸入圖像檔案名稱,例如notepad.exe,最多64個字元。 “System” 和 “Idle” 不是有效的映像名稱。 如果您未指定圖像檔案,Windows 會追蹤具有指定集區標記的所有物件。 如果您同時指定映像檔 (/i) 和一或多個集區卷標 (/t),Windows 會追蹤具有指定映像所建立之任何指定集區標記的物件。 |
/d |
清除物件參考追蹤功能設定。 搭配 /ro 使用時,它會清除登錄中的設定。 |
/p |
永久。 追蹤數據會保留到對象參考追蹤停用,或電腦關閉或重新啟動為止。 根據預設,對象終結時會捨棄對象的追蹤數據。 |
/ko
啟用、停用及顯示核心旗標 (運行時間) 對象參考追蹤 設定。 此設定的變更會立即生效,但會在系統關閉或重新啟動時遺失。 如需詳細資訊,請參閱 範例 15:使用對象參考追蹤。
如果沒有其他參數, /ko 會顯示核心旗標 (運行時間) 對象參考追蹤設定。
若要啟用物件參考追蹤,您必須在命令中包含至少一個集區標籤 (/t PoolTag) 或一個圖像檔案 (/i ImageFile)。
下表列出使用 /ko 有效的子參數。
/t PoolTags |
將追蹤限制為具有指定集區標記的物件。 使用分號 (;) 來分隔標籤名稱。 輸入最多16個集區標籤。 輸入 PoolTags 的四個字元模式,例如 Tag1。 如果您指定多個集區標記,Windows 會追蹤具有任何指定集區標籤的物件。 如果您未指定任何集區標記,Windows 會追蹤映像所建立的所有物件。 |
/i ImageFile |
將追蹤限制為使用指定映像檔的進程所建立的物件。 您只能使用 /i 參數指定一個影像檔。 如果您未指定圖像檔案,Windows 會追蹤具有指定集區標記的所有物件。 如果您同時指定映像檔 (/i) 和一或多個集區卷標 (/t),Windows 會追蹤具有指定映像所建立之任何指定集區標記的物件。 |
/d |
清除物件參考追蹤功能設定。 搭配 /ro 使用時,它會清除登錄中的設定。 |
/p |
永久。 追蹤數據會保留到對象參考追蹤停用,或電腦關閉或重新啟動為止。 根據預設,對象終結時會捨棄對象的追蹤數據。 |
/p
設定進程的頁面堆積驗證選項。
沒有其他參數, gflags /p 會顯示已啟用頁面堆積驗證的影像檔清單。
頁面堆積驗證會監視動態堆積記憶體作業,包括配置作業和免費作業,並在偵測到堆積錯誤時造成調試程式中斷。
/禁用 ImageFile
關閉指定圖像檔的頁面堆積驗證(標準或完整)。
此命令相當於關閉進程 (gflags /i ImageFile -hpa) 的啟用頁面堆積 (hpa) 旗標。 您可以交替使用命令。
/使 ImageFile
開啟指定圖像檔的頁面堆積驗證。
/enable 參數預設會開啟映像檔的標準頁面堆積驗證。 若要啟用圖像檔的完整頁面堆積驗證,請將 /full 參數新增至 命令,或使用 /i 參數搭配 +hpa 旗標。
/滿
開啟進程的完整頁面堆積驗證。 完整頁面堆積驗證會在每個配置結束時放置保留虛擬記憶體的區域。
使用此參數相當於開啟進程 (gflags/i ImageFile +hpa) 的啟用頁面堆積 (hpa) 旗標。 您可以交替使用命令。
/向後
將保留的虛擬記憶體區域放在配置開頭,而不是放在結尾。 因此,調試程式會攔截緩衝區開頭的溢出,而不是緩衝區結尾的溢出。 僅適用於 /full 參數。
/隨機 概率
根據指定的機率,為每個配置選擇完整或標準頁面堆積驗證。
Probability 是 0 到 100 的十進位整數,代表完整頁面堆積驗證的機率。 100 的機率與使用 /full 參數相同。 0 的機率與使用標準頁面堆積驗證相同。
/大小 SizeStart SizeEnd
針對指定大小範圍內的配置啟用完整頁面堆積驗證,並讓進程針對所有其他配置啟用標準頁面堆積驗證。
SizeStart 和 SizeEnd 是十進位整數。 預設值為所有配置的標準頁面堆積驗證。
/位址 AddressStart AddressEnd
在指定的位址範圍中的傳回位址位於運行時間呼叫堆疊上時,啟用所配置記憶體的完整頁面堆積驗證。 它可讓進程針對所有其他配置啟用標準頁面堆積驗證。
若要使用這項功能,請指定範圍,其中包含所有呼叫具有可疑配置之函式的函式位址。 當可疑配置發生時,呼叫函式的位址將會在呼叫堆棧上。
AddressStart 和 AddressEnd 會指定配置堆疊追蹤中搜尋的位址範圍。 位址是以十六進位格式指定,例如,0xAABBCCDD。
在 Windows Server 2003 和舊版系統上, /address 參數只在 x86 型電腦上有效。 在 Windows Vista 上,它適用於所有支持的架構。
/dlls DLL[, DLL...]
針對進程所要求的配置啟用完整頁面堆積驗證,以及進程所有其他配置的標準頁面堆積驗證。
DLL 是二進位檔的名稱,包括其擴展名。 指定的檔案必須是進程在執行期間載入的函式連結庫。
/調試
在調試程式下自動啟動 /enable 參數所指定的進程。
根據預設,此參數會使用NTSD調試程式搭配命令行 ntsd -g -G -x ,並啟用頁面堆積,但您可以使用 DebuggerCommand 變數來指定不同的調試程式和命令行。
如需 NTSD 的相關信息,請參閱 使用 CDB 和 NTSD 進行偵錯。
此選項適用於難以從命令提示字元啟動的程式,以及其他進程所啟動的程式。
“DebuggerCommand”
指定調試程式和傳送至調試程式的命令。 這個引號字串可以包含調試程式的完整路徑、調試程式名稱和調試程式所解譯的命令參數。 需要引號。
如果命令包含調試程序的路徑,則路徑不能包含任何其他引號。 如果出現其他引號,命令殼層 (cmd.exe) 會錯誤解譯命令。
/kdebug
使用命令行 ntsd -g -G -x 自動啟動 NTSD 調試程式下 /enable 參數所指定的進程,並啟用頁面堆積,並控制 NTSD 重新導向至核心調試程式。
如需 NTSD 的相關信息,請參閱 使用 CDB 和 NTSD 進行偵錯。
/unaligned
在頁面結束界限上對齊每個配置的結尾,即使這樣做表示起始位址未對齊 8 位元組區塊也一樣。 根據預設,堆積管理員會保證配置起始位址會對齊 8 位元組區塊。
這個選項可用來偵測逐一位元組的錯誤。 當此參數與 /full 參數搭配使用時,保留虛擬記憶體的區域會在配置的最後一個字節之後開始,而且當進程嘗試讀取或寫入配置以外的一個字節時,就會立即發生錯誤。
/decommit
這個選項已不再有效。 它已接受,但忽略。
Windows 2000 實作完整頁面堆積驗證中包含的 PageHeap 計劃 (pageheap.exe),方法是在配置之後放置無法存取的頁面。 在該工具中 ,/decommit 參數會以無法存取的頁面取代保留虛擬記憶體的區域。 在此版本的 GFlags 中,一律會使用保留的虛擬記憶體區域來實作完整頁面堆積驗證。
/notraces
指定不會儲存運行時間堆疊追蹤。
此選項會稍微改善效能,但會使偵錯更加困難。 此參數有效,但不建議使用。
/故障
強制程式的記憶體配置在指定的速率和指定的逾時之後失敗。
此參數會將堆積配置錯誤插入正在測試的映像檔中(稱為「錯誤插入」的做法),讓某些記憶體配置失敗,因為程式在記憶體不足的情況下執行時可能會發生。 這項測試有助於偵測處理配置失敗的錯誤,例如無法釋放資源。
速率 |
指定從 1 到 10000 (1000%) 到 10000% 的十進位整數,代表配置將會失敗的機率。 預設值為 100 (1%)。 |
TimeOut |
決定程式開始與錯誤插入例程開始之間的時間間隔。 TimeOut 是以秒為單位來測量。 預設值為5(秒)。 |
/洩漏
檢查進程結束時堆積流失的情況。
/leaks 參數會停用完整頁面堆積。 使用 /leaks 時,會忽略修改 /full 參數的 /full 參數和參數,例如 /backwards,而 GFlags 會執行具有洩漏檢查的標準頁面堆積驗證。
/保護
保護堆積內部結構。 此測試用來偵測隨機堆積損毀。 它可以讓執行速度明顯變慢。
/no_sync
檢查是否有未同步存取。 如果此參數偵測到以HEAP_NO_SERIALIZE旗標建立的堆積是由不同的線程存取,就會造成中斷。
請勿使用此旗標來偵錯包含自定義堆積管理員的程式。 同步處理堆積存取的函式會導致頁面堆積驗證器報告不存在的同步處理錯誤。
/no_lock_checks
停用重要區段驗證程式。
/?
顯示 GFlags 的說明。 使用 /p, /? 會顯示 GFlags 中頁面堆積驗證選項的說明。
評論
輸入 沒有參數的 gflags 會開啟 [ 全域旗標] 對話方塊。
輸入 gflags /p 而沒有其他參數會顯示已啟用頁面堆積驗證的程式清單。
若要清除所有旗標,請將 Flag 設定為 -FFFFFFFF。 (設定) 旗標 為 0 會將零新增至目前的旗標值。它不會清除所有旗標。
當您將映像檔的 Flag 設定為 FFFFFFFF 時,Windows 會清除所有旗標,並刪除映像檔登錄子機碼中的 GlobalFlag 專案。 子機碼會維持不變。
頁面堆積 /enable 作業的 /full、/random、/size、/address 和 /dlls 參數會決定哪些配置受限於頁面堆積驗證和所使用的驗證方法。 每個命令中只能使用其中一個參數。 預設值是程式所有配置的標準頁面堆積驗證。 其餘參數會設定頁面堆積驗證的選項。
GFlags 中的頁面堆積功能只會監視使用標準 Windows 堆積管理員函式的堆積記憶體配置(HeapAlloc、GlobalAlloc、LocalAlloc、malloc、malloc、new、new[],或其對應的解除分配函式),或使用呼叫標準堆積管理員函式的自定義作業。
若要判斷程式是否已啟用完整或標準頁面堆積驗證,請在命令行輸入 gflags /p。 在產生的顯示中, 追蹤 表示已為程式啟用標準頁面堆積驗證,而 完整追蹤 表示已為程式啟用完整頁面堆積驗證。
/enable 參數會設定登錄中映射檔的啟用頁面堆積 (hpa) 旗標。 不過,/enable 參數預設會開啟圖像文件的標準堆積驗證,不同於具有 +hpa 旗標的 /i 參數,這會開啟映射檔的完整堆積驗證。
標準 頁面堆積驗證會在配置結束時放置隨機模式,並在釋放堆積區塊時檢查模式。 完整 頁面堆積驗證會在每個配置結束時放置保留虛擬記憶體的區域。
完整頁面堆積驗證可以快速取用系統記憶體。 若要啟用記憶體密集進程的完整頁面堆積驗證,請使用 /size 或 /dlls 參數。
使用全域旗標進行偵錯之後,請提交 gflags /p /disable 命令來關閉頁面堆積驗證,並刪除相關聯的登錄專案。 否則,調試程式讀取的專案會保留在登錄中。 您無法針對此工作使用 gflags /i hpa 命令,因為它會關閉頁面堆積驗證,但不會刪除登錄專案。
根據預設,在 Windows Vista 和更新版本的 Windows 上,程式特定設定(圖像檔旗標和頁面堆積驗證設定)會儲存在目前的用戶帳戶中。
此版本的 GFlags 包含 -v 選項,可針對 GFlags 開發的功能。 不過,這些功能尚未完成,因此不會記載。