當前位置:成語大全網 - 書法字典 - 如何在Windows PowerShell ISE中調試腳本

如何在Windows PowerShell ISE中調試腳本

介紹了如何利用Windows PowerShell集成腳本環境(ISE)的可視化調試功能在本地計算機上調試腳本。

如何管理斷點,如何管理調試會話,如何在調試期間單步執行和單步退出,以及如何在調試期間顯示變量的值。

如何管理斷點

斷點是腳本中要暫停操作的指定位置,以便您可以檢查變量的當前狀態和腳本運行的環境。壹旦腳本被斷點暫停,您可以在控制臺窗格中運行命令來檢查腳本的狀態。您可以輸出變量或運行其他命令。您甚至可以修改對正在運行的腳本的上下文可見的任何變量的值。檢查完您想要看到的內容後,您可以繼續運行腳本。

您可以在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