共用方式為


Set-PSBreakpoint

在行、命令或變數上設定中斷點。

語法

Set-PSBreakpoint -Command <string[]> [[-Script] <string[]>] [-Action <scriptblock>] [<CommonParameters>]

Set-PSBreakpoint [-Script] <string[]> [-Line] <Int32[]> [[-Column] <int>] [-Action <scriptblock>] [<CommonParameters>]

Set-PSBreakpoint -Variable <string[]> [[-Script] <string[]>] [-Mode {<Read> | <Write> | <ReadWrite>}] [-Action <scriptblock>] [<CommonParameters>]

描述

Set-PSBreakpoint Cmdlet 會在目前工作階段內的任一指令碼或任何命令中設定中斷點。在執行指令碼或命令之前、在偵錯期間或當停在另一個中斷點時,都可以使用 Set-PSBreakpoint 設定中斷點。

注意:Set-PSBreakpoint 無法在遠端電腦上設定中斷點。若要偵錯遠端電腦上的指令碼,請指令碼複製到本機電腦,然後在本機進行偵錯。

每個 Set-PSBreakpoint 命令都會建立下列其中一種中斷點:

-- 行中斷點:在特定的行和欄座標設定中斷點。

-- 命令中斷點: 在行和函數上設定中斷點。

-- 變數中斷點:在變數上設定中斷點。

您可以用單一 Set-PSBreakpoint 命令在多行、多個命令或多個變數上設定中斷點,但是每個 Set-PSBreakpoint 命令只能設定一種中斷點。

在中斷點,Windows PowerShell 會暫停執行,並將控制權給予偵錯工具。命令提示字元會變更為 "DBG>",而一組偵錯工具命令會變成可用。不過,您可以使用 Action 參數來指定代替的回應,例如中斷點或指令執行其他工作 (如記錄或診斷) 的條件。

Set-PSBreakpoint Cmdlet 是其中幾個專為偵錯 Windows PowerShell 指令碼所設計的 Cmdlet。如需 Windows PowerShell 偵錯工具的詳細資訊,請參閱 about_Debuggers。

參數

-Action <scriptblock>

指定在每個中斷點執行的命令,而不是進行中斷。請輸入包含命令的指令碼區塊。您可以使用此參數,設定條件式中斷點或執行其他工作 (如測試或記錄)。

如果省略此參數或未指定任何動作,執行會在中斷點停止,而偵錯工具會啟動。

使用 Action 參數時,在每個中斷點都會執行 Action 指令碼區塊。除非指令碼區塊包含 Break 關鍵字,否則執行不會停止。如果在指令碼區塊中使用 Continue 關鍵字,執行會一直繼續到下一個中斷點。

如需詳細資訊,請參閱 about_Script_Blocks、about_Break 和 about_Continue。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Column <int>

指定指令碼檔中執行停止的欄號。請輸入一個欄號即可。預設為欄 1。

Column 值與 Line 參數的值搭配使用可以指定中斷點。如果 Line 參數指定多行,Column 參數會在指定的行的指定的欄設定中斷點。Windows PowerShell 會在指定的行和欄處有字元的陳述式或運算式之前停止執行。

欄是從左上邊界算起,從 1 (非 0) 開始編號。若指定的欄不存在於指令碼中,則不會宣告錯誤,但中斷點永遠不會執行。

必要?

false

位置?

3

預設值

接受管線輸入?

false

接受萬用字元?

false

-Command <string[]>

設定命令中斷點。請輸入命令名稱,例如 "Get-Process" 或函數名稱。允許使用萬用字元。

執行會在每個命令的每個執行個體執行之前停止。如果命令為函數,執行會在函數被呼叫時停止,而且在 BEGIN、PROCESS 和 END 區段停止。

必要?

true

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

true

-Line <Int32[]>

在指令碼內設定行中斷點。請輸入一個或多個行號 (以逗號分隔)。Windows PowerShell 會在執行每個指定的行開始的陳述式之前立即停止。

行是從指令碼檔的左上邊界算起,從 1 (非 0) 開始編號。如果指定空白行,執行會在下一個非空白行之前停止。如果該行超出範圍,中斷點將永遠不會被叫用。

必要?

true

位置?

2

預設值

接受管線輸入?

false

接受萬用字元?

false

-Mode <VariableAccessMode>

決定觸發變數中斷點的存取模式。預設為 Write。

只有當 Variable 參數用於命令中的時候此參數才有效。模式會套用到命令中所設定的所有中斷點。

有效的值包括:

-- Write:在新值寫入變數之前立即停止執行。

-- Read:在讀取變數時 (也就是存取其值以進行指派、顯示或使用時) 停止執行。在讀取模式下,執行不會在變數的值變更時停止。

-- ReadWrite:在讀取或寫入變數時停止執行。

必要?

false

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

-Script <string[]>

在每個指定的指令碼檔內設定中斷點。請輸入一個或多個指令碼檔的路徑和檔案名稱。如果這些檔案位於目前的目錄,就可以省略路徑。允許使用萬用字元。

根據預設,在任何於目前工作階段中執行的命令上都會設定變數中斷點和命令中斷點。只有在設定行中斷點時才必須提供此參數。

必要?

false

位置?

1

預設值

接受管線輸入?

false

接受萬用字元?

true

-Variable <string[]>

設定變數中斷點。請輸入以逗號分隔的變數 (不含貨幣符號 ($)) 清單。

Mode 參數可以用來決定觸發變數中斷點的存取模式。預設模式,Write,會在新值寫入變數之前停止執行。

必要?

true

位置?

named

預設值

接受管線輸入?

false

接受萬用字元?

false

<CommonParameters>

這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.

輸入和輸出

輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。

輸入

您無法經由管道將輸入輸出至 Set-PSBreakpoint。

輸出

中斷點物件 (System.Management.Automation.LineBreakpoint、System.Management.Automation.VariableBreakpoint、System.Management.Automation.CommandBreakpoint)

Set-PSBreakpoint 會傳回代表它所設定之每個中斷點的物件。

附註

Set-PSBreakpoint 無法在遠端電腦上設定中斷點。若要偵錯遠端電腦上的指令碼,請指令碼複製到本機電腦,然後在本機進行偵錯。

當您在一個以上的行、命令或函數上設定中斷點時,Set-PSBreakpoint 會為每個項目產生中斷點物件。

在命令列提示字元下設定函數或變數上的中斷點時,可以在建立函數或變數之前或之後設定中斷點。

範例 1

C:\PS>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

描述
-----------
這個命令會在 Sample.ps1 指令碼的第 5 行設定中斷點。因此,指令碼執行時,執行會在第 5 行要執行之前立即停止。

當您依行號設定新的中斷點時,Set-PSBreakpoint Cmdlet 會產生行中斷點物件 (System.Management.Automation.LineBreakpoint),其包含中斷點識別碼和叫用次數,如下列範例輸出所示。





範例 2

C:\PS>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

描述
-----------
這個命令會在 Sample.ps1 Cmdlet 的 Increment 函數上建立命令中斷點。此指令碼會在每次呼叫指定的函數之前立即停止執行。

結果為命令中斷點物件。此指令碼執行之前,HitCount 屬性的值為 0。





範例 3

C:\PS>set-psbreakpoint -script sample.ps1 -variable Server -Mode ReadWrite

描述
-----------
這個命令會在 Sample.ps1 指令碼的 Server 變數上設定中斷點,並使用 Mode 參數搭配 ReadWrite 的值,以便在讀取變數的值時而且在值變更之前停止執行。





範例 4

C:\PS>set-psbreakpoint -script Sample.ps1 -command "write*"

描述
-----------
這個命令會在 Sample.ps1 指令碼中所有開頭為 "write" (如 "write-host") 的命令上設定中斷點。





範例 5

C:\PS>set-psbreakpoint -script test.ps1 -command DiskTest `
  -action { (if $disk -gt 2) { break } }

描述
-----------
這個命令會在只有當 $disk 變數的值大於 2 時,才在 Test.ps1 指令碼的 DiskTest 函數處停止執行。

它會使用 Set-PSBreakpoint Cmdlet,在 DiskTest 函數上設定命令中斷點。動作的值為指令碼區塊,以便測試此函數中 $disk 變數的值。

如果條件符合,動作會使用 BREAK 關鍵字停止執行。替代 (和預設) 的關鍵字為 CONTINUE。





範例 6

C:\PS>set-psbreakpoint -command checkpoint-computer

Id       : 0
Command  : checkpoint-computer
Enabled  : True
HitCount : 0
Action   :

C:\PS> function CheckLog {
>> get-eventlog -log Application | 
>> where {($_.source -like "TestApp") -and ($_.Message -like "*failed*")}
>>}
>>
C:\PS> Checklog
DEBUG: Hit breakpoint(s)
DEBUG:  Function breakpoint on 'prompt:Checklog'
C:\PS>>>

描述
-----------
這個命令會在 CheckLog 函數上設定中斷點。因為這個命令沒有指定指令碼,中斷點會設定在目前工作階段內執行的任何項目上。在呼叫 (而非宣告) 該函數時,偵錯工具會進入命令列。





範例 7

C:\PS>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

描述
-----------
這個命令會在 Sample.ps1 指令碼中設定三個行中斷點,並在指令碼中指定的每一行的第 2 欄設定中斷點。Action 參數中指定的動作會套用到所有中斷點。





請參閱

概念

about_Debuggers
Get-PSBreakpoint
Enable-PSBreakpoint
Disable-PSBreakpoint
Remove-PSBreakpoint
Get-PSCallStack