共用方式為


wt (追蹤和監看資料)

當您在函數調用開始時執行此命令時,wt 命令會透過整個函式執行,然後顯示統計數據。

wt [WatchOptions] [= StartAddress] [EndAddress] 

參數

WatchOptions
指定如何修改顯示。 您可以使用下列任一選項。

選項 效果

-l 深度

(僅限使用者模式)指定要顯示之呼叫的最大深度。 至少比起點更深的任何呼叫,會以無訊息方式執行。

-m 模組

(僅限使用者模式)將顯示限制為指定模組內的程序代碼,加上從該模組進行的第一層呼叫。 您可以包含多個 -m 選項,以顯示來自多個模組的程式代碼,而沒有其他模組。

-i 模組

(僅限使用者模式)忽略指定模組內的任何程序代碼。 您可以包含多個 -i 選項,以忽略多個模組的程式代碼。 如果您使用 -m 選項,調試程式會忽略所有 -i 選項。

-鎳

(僅限使用者模式)不會顯示因 -m 或 -i 選項而忽略之程序代碼中的任何專案。

-數控

不會顯示個別的通話資訊。

-ns

不會顯示摘要資訊。

-西北

不會在追蹤期間顯示警告。

-oa

(僅限使用者模式)顯示通話網站的實際位址。

-or

(僅限使用者模式)使用預設基數做為基底,顯示所呼叫函式的傳回緩存器值。

-或

(僅限使用者模式)針對每個傳回值,顯示所呼叫函式的傳回緩存器值。

StartAddress
指定除錯程式開始執行的位址。 如果您未使用 StartAddress,執行會從指令指標指向的指令開始。 如需語法的詳細資訊,請參閱 地址和地址範圍語法

EndAddress
指定追蹤結束的位址。 如果您未使用 EndAddress,則會執行單一指令或函數調用。

Environment

模式

使用者模式、核心模式

目標

僅限即時偵錯

平台

使用者模式: 所有 核心模式: 僅限 x86 型

其他資訊

如需發出 wt 命令和相關命令概觀的詳細資訊,請參閱 控制目標

備註

如果您想要特定函式行為的相關信息,但不想逐步執行函式,則 wt 命令很有用。 請改為移至該函式的開頭,然後發出 wt 命令。

如果程式計數器位於對應至符號的點上(例如函式的開頭或模組進入點), 則 wt 命令會追蹤直到到達目前的傳回地址為止。 如果程式計數器位於呼叫指令上,則 wt 命令會追蹤,直到它回到目前的位置為止。 此追蹤會在 [調試程式命令] 視窗中剖析,以及描述命令所遇到的各種呼叫的輸出。

如果 wt 命令是在函式開頭以外的某個位置發出,則命令的行為會像 p (Step) 命令一樣 不過,如果您指定 EndAddress,則執行會繼續直到達到該地址為止,即使此執行牽涉到許多程式步驟和函數調用也一樣。

當您在來源模式中偵錯時,應該只追蹤到函式主體的左括號所在點。 然後,您可以使用 wt 命令。 (通常較容易在函式的第一行插入斷點,或使用 偵錯 |執行至 Cursor,然後使用 wt 命令。

由於 wt輸出可能很長,因此您可能想要使用記錄檔來記錄輸出。

下列範例顯示一般記錄檔。

0:000> l+                  Source options set to show source lines
Source options are f:
     1/t - Step/trace by source line
     2/l - List source line for LN and prompt
     4/s - List source code at prompt
     8/o - Only show source code at prompt
0:000> p                   Not yet at the function call: use "p"
>  44:       minorVariableOne = 12;
0:000> p
>  45:       variableOne = myFunction(2, minorVariable);
0:000> t                   At the function call: now use "t"
MyModule!ILT+10(_myFunction):
0040100f e9cce60000      jmp     MyModule!myFunction (0040f6e0)
0:000> t
>  231:    { 
0:000> wt                  At the function beginning:  now use "wt"
Tracing MyModule!myFunction to return address 00401137

  105     0 [  0] MyModule!myFunction
    1     0 [  1]   MyModule!ILT+1555(_printf)
    9     0 [  1]   MyModule!printf
    1     0 [  2]     MyModule!ILT+370(__stbuf)
   11     0 [  2]     MyModule!_stbuf
    1     0 [  3]       MyModule!ILT+1440(__isatty)
   14     0 [  3]       MyModule!_isatty
   50    15 [  2]     MyModule!_stbuf
   17    66 [  1]   MyModule!printf
    1     0 [  2]     MyModule!ILT+980(__output)
   59     0 [  2]     MyModule!_output
   39     0 [  3]       MyModule!write_char
  111    39 [  2]     MyModule!_output
   39     0 [  3]       MyModule!write_char

....

   11     0 [  5]           kernel32!__SEH_epilog4
   54 11675 [  4]         kernel32!ReadFile
  165 11729 [  3]       MyModule!_read
  100 11895 [  2]     MyModule!_filbuf
   91 11996 [  1]   MyModule!fgets
54545 83789 [  0] MyModule!myFunction
    1     0 [  1]   MyModule!ILT+1265(__RTC_CheckEsp)
    2     0 [  1]   MyModule!_RTC_CheckEsp
54547 83782 [  0] MyModule!myFunction

112379 instructions were executed in 112378 events (0 from other threads)

Function Name                               Invocations MinInst MaxInst AvgInst
MyModule!ILT+1265(__RTC_CheckEsp)                     1       1       1       1
MyModule!ILT+1440(__isatty)                          21       1       1       1
MyModule!ILT+1540(__ftbuf)                           21       1       1       1
....
ntdll!memcpy                                         24       1      40      19
ntdll!memset                                          2      29      29      29

23 system calls were executed

Calls  System Call
   23  ntdll!KiFastSystemCall

在追蹤清單中,第一個數位會指定已執行的指令數目,第二個數位會指定函式子進程所執行的指令數目,而第三個數位(以括弧括住)指定堆疊中函式的深度(採用初始函式為零)。 函式名稱的縮排會顯示呼叫深度。

在上述範例中, MyModule!myFunction 會在呼叫數個子程式之前執行 105 個指令,包括 printffgets,然後在呼叫這些函式之後執行 54545 個額外的指令,但在發出更多呼叫之前。 不過,在最終計數中,顯示顯示 myFunction 執行 112,379 個指令,因為此計數包含 myFunction 及其子系執行的所有指示(myFunction 的子系是直接或間接從 myFunction 呼叫的函式。

在上述範例中,另 請注意,ILT+1440 (__isatty) 呼叫 21 次。 在最終計數中,此函式行為的摘要會顯示呼叫的次數、任何單一執行的指令數目最小、任何單一執行的指令數目上限,以及每個執行的平均指令數目。

如果進行任何系統呼叫,它們會出現在計數器中,並在命令輸出結尾再次列出。