Set-PSBreakpoint
在行、命令或變數上設定斷點。
語法
Set-PSBreakpoint
[-Action <ScriptBlock>]
[[-Column] <Int32>]
[-Line] <Int32[]>
[-Script] <String[]>
[<CommonParameters>]
Set-PSBreakpoint
[-Action <ScriptBlock>]
-Command <String[]>
[[-Script] <String[]>]
[<CommonParameters>]
Set-PSBreakpoint
[-Action <ScriptBlock>]
[[-Script] <String[]>]
-Variable <String[]>
[-Mode <VariableAccessMode>]
[<CommonParameters>]
Description
Set-PSBreakpoint
Cmdlet 會在腳本或目前工作階段中執行的任何命令中設定斷點。 您可以使用 Set-PSBreakpoint
在執行文稿或執行命令,或在偵錯期間於另一個斷點停止時設定斷點。
Set-PSBreakpoint
無法在遠端電腦上設定斷點。 若要對遠端電腦上的腳本進行偵錯,請將腳本複製到本機計算機,然後在本機進行偵錯。
每個 Set-PSBreakpoint
命令都會建立下列三種類型的斷點之一:
- 行斷點 - 設定特定線條和數據行座標的斷點。
- 命令斷點 - 在命令和函式上設定斷點。
- 變數斷點 - 設定變數上的斷點。
您可以在單一 Set-PSBreakpoint
命令中,在多行、命令或變數上設定斷點,但每個 Set-PSBreakpoint
命令只會設定一種斷點類型。
在斷點上,PowerShell 會暫時停止執行,並將控制權提供給調試程式。 命令提示字元會變更為 DBG\>
,而且有一組調試程式命令可供使用。 不過,您可以使用 Action 參數來指定替代回應,例如斷點的條件或指示來執行其他工作,例如記錄或診斷。
Set-PSBreakpoint
Cmdlet 是數個專為偵錯 PowerShell 腳本而設計的 Cmdlet 之一。
如需 PowerShell 調試程式的詳細資訊,請參閱 about_Debuggers。
範例
範例 1:在行上設定斷點
本範例會在 Sample.ps1 腳本的第 5 行設定斷點。 當腳本執行時,執行會在第 5 行執行之前立即停止。
Set-PSBreakpoint -Script "sample.ps1" -Line 5
Column : 0
Line : 5
Action :
Enabled : True
HitCount : 0
Id : 0
Script : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1
當您依行號設定新的斷點時,Set-PSBreakpoint
Cmdlet 會產生包含斷點標識碼和叫用計數的行斷點物件(System.Management.Automation.LineBreakpoint)。
範例 2:在函式上設定斷點
此範例會在 Sample.ps1 Cmdlet 的 Increment
函式上建立命令斷點。 文本會在每次呼叫指定的函式之前立即停止執行。
Set-PSBreakpoint -Command "Increment" -Script "sample.ps1"
Command : Increment
Action :
Enabled : True
HitCount : 0
Id : 1
Script : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1
結果是命令斷點物件。 在腳本執行之前,hitCount 屬性
範例 3:在變數上設定斷點
本範例會在 Sample.ps1 腳本的 Server 變數上設定斷點。 它會使用 Mode 參數搭配 ReadWrite 值,以在讀取變數的值和值變更之前停止執行。
Set-PSBreakpoint -Script "sample.ps1" -Variable "Server" -Mode ReadWrite
範例 4:在每個以指定文字開頭的命令上設定斷點
本範例會在以 「write」 開頭的 Sample.ps1 腳本中的每個命令上設定斷點,例如 Write-Host
。
Set-PSBreakpoint -Script Sample.ps1 -Command "write*"
範例 5:根據變數的值設定斷點
只有當 $Disk
變數的值大於 2 時,這個範例才會停止 Test.ps1
腳本中的 DiskTest
函式執行。
Set-PSBreakpoint -Script "test.ps1" -Command "DiskTest" -Action { if ($Disk -gt 2) { break } }
Action 的值是測試函式中 $Disk
變數值的腳本區塊。
動作會使用 break
關鍵詞,在符合條件時停止執行。 替代專案(和預設值)是 繼續。
範例 6:在函式上設定斷點
本範例會在 CheckLog
函式上設定斷點。 因為命令未指定文稿,因此斷點會在目前會話中執行的任何項目上設定。 調試程式會在呼叫 函式時中斷,而不是在宣告函式時中斷。
PS> Set-PSBreakpoint -Command "checklog"
Id : 0
Command : checklog
Enabled : True
HitCount : 0
Action :
function CheckLog {
>> get-eventlog -log Application |
>> where {($_.source -like "TestApp") -and ($_.Message -like "*failed*")}
>>}
>>
PS> Checklog
DEBUG: Hit breakpoint(s)
DEBUG: Function breakpoint on 'prompt:Checklog'
範例 7:在多行上設定斷點
本範例會在 Sample.ps1 腳本中設定三個行斷點。 它會在腳本中指定的每一行上,在數據行 2 上設定一個斷點。 Action 參數中指定的動作適用於所有斷點。
PS C:\> Set-PSBreakpoint -Script "sample.ps1" -Line 1, 14, 19 -Column 2 -Action {&(log.ps1)}
Column : 2
Line : 1
Action :
Enabled : True
HitCount : 0
Id : 6
Script : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1
Column : 2
Line : 14
Action :
Enabled : True
HitCount : 0
Id : 7
Script : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1
Column : 2
Line : 19
Action :
Enabled : True
HitCount : 0
Id : 8
Script : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1
參數
-Action
指定在每個斷點執行的命令,而不是中斷。 輸入包含命令的腳本區塊。 您可以使用此參數來設定條件斷點,或執行其他工作,例如測試或記錄。
如果省略此參數,或未指定任何動作,則執行會在斷點停止,而且調試程式會啟動。
使用 Action 參數時,動作腳本區塊會在每個斷點執行。 除非腳本區塊包含 Break 關鍵詞,否則執行不會停止。 如果您在腳本區塊中使用 Continue 關鍵詞,執行會繼續直到下一個斷點為止。
如需詳細資訊,請參閱 about_Script_Blocks、about_Break和 about_Continue。
類型: | ScriptBlock |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Column
指定執行停止之文稿檔案中數據行的數據行編號。 只輸入一個數據行編號。 預設值為數據行 1。
Column 值會與 Line 參數的值搭配使用,以指定斷點。 如果 Line 參數指定多行,則 Column 參數會在每個指定行的指定數據行上設定斷點。 PowerShell 會在語句或表達式之前停止執行,其中包含指定行和欄位置的字元。
從左上方邊界開始計算數據行編號 1 (不是 0)。 如果您指定文本中不存在的數據行,則不會宣告錯誤,但永遠不會執行斷點。
類型: | Int32 |
Position: | 2 |
預設值: | 1 |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Command
設定命令斷點。 輸入 Cmdlet 名稱,例如 Get-Process
或函式名稱。 允許通配符。
執行會在執行每個命令的每個實例之前停止。 如果命令是函式,每次呼叫函式,並在每個 BEGIN、PROCESS 和 END 區段呼叫 函式時,執行就會停止。
類型: | String[] |
別名: | C |
Position: | Named |
預設值: | None |
必要: | True |
接受管線輸入: | False |
接受萬用字元: | True |
-Line
在腳本中設定行斷點。 輸入一或多個行號,並以逗號分隔。 PowerShell 會在執行每一行開始的語句之前立即停止。
行會從腳本檔案的左上方邊界計算,開頭為行號 1 (不是 0)。 如果您指定空白行,則執行會在下一個非空白行之前停止。 如果行超出範圍,則永遠不會叫用斷點。
類型: | Int32[] |
Position: | 1 |
預設值: | None |
必要: | True |
接受管線輸入: | False |
接受萬用字元: | False |
-Mode
指定觸發變數斷點的存取模式。 預設值為 Write。
只有當命令中使用 Variable 參數時,此參數才有效。 模式會套用至命令中設定的所有斷點。 此參數可接受的值為:
- 寫入 - 在將新值寫入變數之前立即停止執行。
- 讀取 - 在讀取變數時停止執行,也就是存取變數的值時,要指派、顯示或使用。 在讀取模式中,當變數的值變更時,不會停止執行。
- ReadWrite - 讀取或寫入變數時停止執行。
類型: | VariableAccessMode |
接受的值: | Read, Write, ReadWrite |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Script
指定這個 Cmdlet 在 中設定斷點的腳本檔案陣列。 輸入一或多個腳本檔案的路徑和檔名。 如果檔案位於目前目錄中,您可以省略路徑。 允許通配符。
根據預設,變數斷點和命令斷點會在目前會話中執行的任何命令上設定。 只有在設定行斷點時,才需要此參數。
類型: | String[] |
Position: | 0 |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Variable
指定這個 Cmdlet 設定斷點的變數陣列。 輸入不含貨幣符號的變數逗號分隔清單($
)。
使用 Mode 參數來判斷觸發斷點的存取模式。 預設模式 Write 會在新值寫入變數之前停止執行。
類型: | String[] |
別名: | V |
Position: | Named |
預設值: | None |
必要: | True |
接受管線輸入: | False |
接受萬用字元: | False |
輸入
None
您無法使用管線將輸入傳送至 Set-PSBreakpoint
。
輸出
Set-PSBreakpoint
會傳回 物件,代表它設定的每個斷點。
備註
-
Set-PSBreakpoint
無法在遠端電腦上設定斷點。 若要對遠端電腦上的腳本進行偵錯,請將腳本複製到本機計算機,然後在本機進行偵錯。 - 當您在多個行、命令或變數上設定斷點時,
Set-PSBreakpoint
為每個專案產生斷點物件。 - 在命令提示字元中設定函式或變數的斷點時,您可以在建立函式或變數之前或之後設定斷點。