如何管理斷點,如何管理調試會話,如何在調試期間單步執行和單步退出,以及如何在調試期間顯示變量的值。
如何管理斷點
斷點是腳本中要暫停操作的指定位置,以便您可以檢查變量的當前狀態和腳本運行的環境。壹旦腳本被斷點暫停,您可以在控制臺窗格中運行命令來檢查腳本的狀態。您可以輸出變量或運行其他命令。您甚至可以修改對正在運行的腳本的上下文可見的任何變量的值。檢查完您想要看到的內容後,您可以繼續運行腳本。
您可以在Windows PowerShell調試環境中設置三種類型的斷點:
行斷點* * * *在腳本運行期間,當到達指定行時,腳本暫停。
可變斷點。只要指定變量的值發生變化,腳本就會暫停。
命令斷點。在腳本運行期間,每當要運行指定的命令時,腳本都會暫停。它可以包含參數,以便只為必需的操作進壹步篩選斷點。該命令也可以是您創建的函數。
其中,在Windows PowerShell ISE調試環境中,只能使用菜單或鍵盤快捷鍵設置行斷點。您可以設置其他兩種類型的斷點,但應該使用Set-PSBreakpoint [m2] cmdlet從控制臺窗格中設置它們。本節介紹如何在Windows PowerShell ISE中使用菜單(如果有)執行調試任務,以及如何通過腳本從控制臺窗格中執行更廣泛的命令。
設置斷點
只有在保存腳本後,才能在腳本中設置斷點。右擊要設置行斷點的行,然後單擊切換斷點。或者,單擊要設置斷點的行,然後按F9,或者在“調試”菜單上,單擊“切換斷點”。********
以下腳本是如何使用Set-PSBreakpoint cmdlet從控制臺窗格設置變量斷點的示例。
#此命令在Sample.ps1腳本中的服務器變量上設置斷點。
set-PS斷點-腳本示例. PS 1-變量服務器
列出所有斷點
顯示當前Windows PowerShell會話中的所有斷點。
在“調試”菜單上,單擊“列出斷點”。* * * * * *以下腳本是如何使用Get-PSBreakpoint cmdlet從控制臺窗格中列出所有斷點的示例。
#該命令列出當前會話中的所有斷點。
get-psbreakpoint
移除斷點
移除斷點將會刪除它。如果您認為以後可能會再次使用它,請考慮將其禁用。右擊要刪除的斷點行,然後單擊切換斷點。或者,單擊要移除的斷點所在的行,然後在“調試”菜單上,單擊“切換斷點”。* * * * * *以下腳本是如何使用Remove-PSBreakpoint cmdlet從控制臺窗格中刪除具有指定ID的斷點的示例。
#此命令刪除斷點ID為2的斷點。
移除-PS斷點-id 2
移除所有斷點
若要移除當前會話中定義的所有斷點,請在“調試”菜單上,單擊“移除所有斷點”。********
以下腳本是如何使用Remove-PSBreakpoint cmdlet從控制臺窗格中刪除所有斷點的示例。
#該命令刪除當前會話中的所有斷點。
獲取斷點|刪除斷點
禁用斷點
禁用斷點不會移除它們;它只有在啟用後才會關閉。若要禁用特定的行斷點,請右鍵單擊要禁用的行斷點所在的行,然後單擊“禁用斷點”。或者,單擊要禁用的斷點行並按F9,或者在“調試”菜單上,單擊“禁用斷點”。* * * * * *以下腳本是如何使用Disable-PSBreakpoint cmdlet從控制臺窗格中刪除具有指定ID的斷點的示例。
#此命令禁用斷點ID為0的斷點。
禁用-PS斷點-id 0
禁用所有斷點
禁用斷點不會移除它們;它只有在啟用後才會關閉。若要禁用當前會話中的所有斷點,請在“調試”菜單上,單擊“禁用所有斷點”。* * * * * *以下腳本是如何使用Disable-PSBreakpoint cmdlet從控制臺窗格禁用所有斷點的示例。
#此命令禁用當前會話中的所有斷點。
#您可以將此命令縮寫為:" gbp | dbp "。
get-PS breakpoint | disable-PS breakpoint
啟用斷點
若要啟用特定斷點,請右擊要啟用的斷點行,然後單擊“啟用斷點”。或者,單擊要啟用的斷點行並按F9,或者在“調試”菜單上,單擊“啟用斷點”。* * * * * *以下腳本是如何使用Enable-PSBreakpoint cmdlet從控制臺窗格啟用特定斷點的示例。
#此命令啟用斷點id為0、1和5的斷點。
enable-psbreakpoint -id 0,1,5
啟用所有斷點
若要啟用當前會話中定義的所有斷點,請在“調試”菜單上,單擊“啟用所有斷點”。* * * * * *以下腳本是如何使用Enable-PSBreakpoint cmdlet從控制臺窗格啟用所有斷點的示例。
#該命令啟用當前會話中的所有斷點。
#您可以使用別名來縮寫命令:“gbp | ebp”。
get-PS斷點| enable-PS斷點
如何管理調試會話
在開始調試之前,必須設置壹個或多個斷點。除非保存了要調試的腳本,否則不能設置斷點。有關如何設置斷點的說明,請參見如何管理斷點或set-ps斷點。開始調試後,除非停止調試,否則將無法編輯腳本。帶有壹個或多個斷點的腳本會在運行前自動保存。
開始調試
按F5或單擊工具欄上的“運行腳本”圖標,或單擊“調試”菜單上的“運行\/繼續”。腳本將壹直運行,直到遇到第壹個斷點。它將在這裏暫停操作,並突出顯示暫停的那壹行。
繼續調試
按F5或單擊工具欄上的“運行腳本”圖標,或單擊“調試”菜單上的“運行\/繼續”,或在控制臺窗格中鍵入c並按ENTER。這將導致腳本繼續運行到下壹個斷點,或者如果下壹次沒有遇到斷點,則運行到腳本的結尾。
查看調用堆棧
調用堆棧顯示腳本中的當前運行位置。如果腳本在由另壹個函數調用的函數中運行,它將在輸出中通過壹個附加行顯示出來。最下面壹行顯示了原始腳本和調用函數在腳本中的位置。下壹行顯示了該函數以及該函數中可能調用了另壹個函數的那壹行。最上面壹行顯示了設置了斷點的當前行的當前上下文。
若要在暫停時查看當前調用堆棧,請按CTRL+SHIFT+D,或者單擊“調試”菜單上的“顯示調用堆棧”,或者在控制臺窗格中鍵入k並按ENTER。
停止調試
按SHIFT-F5,或者單擊“調試”菜單上的“停止調試器”,或者在控制臺窗格中鍵入q,然後按ENTER。
如何在調試過程中跨過去,踏進去,又走出去
單步執行是壹次運行壹條語句的過程。您可以在壹行代碼處停下來,然後檢查變量的值和系統狀態。下表描述了常見的調試任務,如單步調試、單步調試和單步調試。
調試任務解釋了如何在PowerShell ISE中進行調試。
單步執行當前語句,然後在下壹條語句處停止。如果當前語句是函數或腳本調用,調試器將逐句通過該函數或腳本,或者在下壹條語句處停止。按F11,或者在“調試”菜單上,單擊“步驟”,或者在控制臺窗格中,鍵入s,然後按ENTER。********
跳過當前語句,然後在下壹條語句處停止。如果當前語句是函數或腳本調用,調試器將執行整個函數或腳本,或者在函數調用後的下壹條語句處停止。按F10,或者在“調試”菜單上,單擊“單步執行”,或者在控制臺窗格中,鍵入v,然後按ENTER。********
跳出當前函數,如果函數是嵌套的,則返回上壹級。如果在主體中,腳本將執行到底,或者執行到下壹個斷點。被跳過的語句將被執行,但不會單步執行。按SHIFT+F11,或者單擊“調試”菜單上的“跳出”,或者在控制臺窗格中鍵入o並按ENTER。
繼續執行到結尾,或下壹個斷點。跳過的函數和調用將被執行,但不會有單步遍歷。按F5或單擊調試菜單上的運行/繼續,或在控制臺窗格中鍵入c並按ENTER。
調試時如何顯示變量值?
當單步執行代碼時,您可以在腳本中顯示變量的當前值。
顯示標準變量的值。
使用以下方法之壹:
在腳本窗格中,將鼠標懸停在變量上以在工具提示中顯示其值。
在控制臺窗格中,鍵入變量的名稱,然後按ENTER鍵。
ISE中的所有窗格總是在同壹範圍內。因此,調試腳本時,您在控制臺窗格中鍵入的命令在腳本範圍內運行。這樣,您可以使用控制臺窗格來查找變量的值,並調用僅在腳本中定義的函數。
顯示自動變量的值。
調試腳本時,可以使用上述方法顯示幾乎所有變量的值。但是,這些方法不適用於下列自動變量。
$_
$輸入
$MyInvocation
$PSBoundParameters
$Args
如果您嘗試顯示這些變量中的任何壹個的值,您將獲得調試器使用的內部管道中的變量值,而不是腳本中的變量值。對於某些變量($ _,$Input,$MyInvocation,$PSBoundParameters和$Args),可以使用以下方法來解決這個問題:
在腳本中,將自動變量的值賦給壹個新變量。
將鼠標懸停在腳本窗格中的新變量上,或者在控制臺窗格中鍵入新變量的值,即可顯示新變量的值。
例如,要顯示$MyInvocation變量的值,請在腳本中將該值賦給壹個新變量(如$scriptname),然後將鼠標懸停在$scriptname變量上或鍵入$scriptname變量以顯示其值。
#在MyScript.ps1中
$scriptname = $MyInvocation。MyCommand.Path
#在控制臺窗格中:
c:\ PS-test & gt;$scriptname
C:\ps-test\MyScript.ps1