調用堆棧是指向程序計數器當前位置的函數調用鏈。調用堆棧的頂部函數是當前函數,下一個函數是調用當前函數的函數,依此類推。顯示的調用堆棧基於當前程序計數器,除非更改寄存器上下文。
在 WinDbg 中,可以通過輸入命令或通過使用Call Stack窗口中查看調用堆棧。
Call Stack窗口的打開方式
- 通過菜單View--->Call Stack打開
- 通過快捷鍵Alt+6打開
- 通過工具欄按鈕打開
Call Stack窗口
作為一種替代方法 k命令時,您可以調用窗口中查看調用堆棧。通過上面的方式打開call stack窗口
call stack窗口中的按鈕可用於自定義調用堆棧的視圖。要移動到源窗口或反匯編窗口中相應的調用位置,請雙擊調用堆棧中的一行,或選擇一行並按回車鍵。此操作還將本地上下文更改為選定的堆棧幀。
調用窗口具有一個包含多個按鈕和具有帶其他命令的快捷菜單的工具欄。 若要訪問此菜單中,右鍵單擊標題欄或單擊窗口 (在右上角附近的圖標)。 工具欄和菜單包含以下按鈕和命令:
-
Raw args 顯示傳遞給函數的前三個參數。在基於x86的處理器上,此顯示包括傳遞給函數的前三個參數(“Args to Child”)。
-
Func info 顯示幀指針省略(FPO)數據和其他有關函數的內部信息。此命令僅在基於x86的處理器上可用。
-
Source 在函數名之后顯示源模塊名和行號(如果調試器具有此信息)。
-
Addrs 顯示各種與幀相關的地址。在基於x86的處理器上,此顯示包括堆棧幀的基指針(“ChildEBP”)和返回地址(“RetAddr”)。
-
Nonvolatile regs 顯示寄存器上下文的非易失性部分。此命令僅在基於安騰的處理器上可用。
-
Frame nums 顯示幀編號。幀總是連續編號的,從零開始。
-
-
Arg types 顯示有關堆棧中的函數預期和接收的參數的詳細信息。
-
Always floating 將使窗口停靠,即使仍拖到停靠位置。
-
Move with frame WinDbg幀移動時使窗口在移動,即使窗口已解除鎖定。
其他說明
在用戶模式下,堆棧跟蹤基於當前線程的堆棧。在內核模式下,堆棧跟蹤基於當前寄存器上下文。 可以設置寄存器上下文以匹配特定線程、 上下文記錄或捕獲幀。 如果Call Stack窗口打開時,使用~1s切換線程、.cxr切換上下文等指令事,Call Stack窗口里顯示的堆棧內容會發生改變。