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>]

说明

cmdlet Set-PSBreakpoint 在脚本或当前会话中运行的任何命令中设置断点。 在执行脚本或运行命令之前,或者调试期间,在另一个断点处停止时,可以使用 Set-PSBreakpoint 设置断点。

Set-PSBreakpoint 无法在远程计算机上设置断点。 若要在远程计算机上调试脚本,请将该脚本复制到本地计算机,然后从本地进行调试。

每个命令创建 Set-PSBreakpoint 以下三种类型的断点之一:

  • 行断点 - 设置特定线条和列坐标处的断点。
  • 命令断点 - 设置命令和函数上的断点。
  • 变量断点 - 设置变量上的断点。

可以在单个命令中 Set-PSBreakpoint 对多个行、命令或变量设置断点,但每个 Set-PSBreakpoint 命令仅设置一种类型的断点。

在断点处,PowerShell 会暂时停止执行,并将控制权交给调试器。 命令提示符更改为 DBG\>,并且一组调试器命令可供使用。 但是,可以使用 Action 参数指定备用响应,例如断点的条件或用于执行其他任务(如日志记录或诊断)的说明。

cmdlet Set-PSBreakpoint 是设计用于调试 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 将生成一个包含断点 ID 和命中计数) 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 属性的值为 0。

示例 3:在变量上设置断点

此示例在 Sample.ps1 脚本中的 Server 变量上设置断点。 它使用值为 ReadWriteMode 参数,在读取变量的值时和值更改之前停止执行。

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该操作使用关键字 (keyword) 停止执行。 替代 (,默认) 为 Continue

示例 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_Blocksabout_Breakabout_Continue

Type:ScriptBlock
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Column

指定执行停止的脚本文件中的列的列号。 仅输入一个列号。 默认值为列 1。

Column 值与 Line 参数的值一起使用,以指定断点。 如果 Line 参数指定多行, 则 Column 参数在每个指定行的指定列上设置断点。 PowerShell 在包含指定行和列位置的字符的语句或表达式之前停止执行。

列从左上方边沿以列号 1(而不是 0)开始计数。 如果指定了脚本中不存在的列,则不会声明错误,但是永远不会执行断点。

Type:Int32
Position:2
Default value:1
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Command

设置命令断点。 输入 cmdlet 名称,例如 Get-Process或函数名称。 允许使用通配符。

执行正好在执行每个命令的每个实例之前停止。 如果该命令是一个函数,则执行在每次调用该函数时以及在每个开始、过程和结束部分上停止。

Type:String[]
Aliases:C
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-Line

在脚本中设置行断点。 输入一个或多个行号,用逗号分隔。 PowerShell 将立即停止,然后再执行从每个指定行开始的语句。

行从脚本文件的左上方边沿以行号 1(而不是 0)开始计数。 如果指定空行,则执行将在下一个非空行之前停止。 如果行不在范围内,则永远不会命中断点。

Type:Int32[]
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Mode

指定触发变量断点的访问模式。 默认值为 Write

仅当命令中使用 Variable 参数时,此参数才有效。 此模式适用于命令中设置的所有断点。 此参数的可接受值为:

  • 写入 - 在将新值写入变量之前立即停止执行。
  • 读取 - 在读取变量(即访问变量值时)要分配、显示或使用时停止执行。 在读取模式下,当变量的值发生更改时,执行不会停止。
  • ReadWrite - 读取或写入变量时停止执行。
Type:VariableAccessMode
Accepted values:Read, Write, ReadWrite
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Script

指定此 cmdlet 在中设置断点的脚本文件数组。 输入一个或多个脚本文件的路径和文件名称。 如果文件在当前目录中,则可以省略该路径。 允许使用通配符。

默认情况下,将在当前会话中运行的任何命令上设置变量断点和命令断点。 仅当设置行断点时,此参数才是必需的。

Type:String[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Variable

指定此 cmdlet 设置断点的变量数组。 输入不带美元符号的变量的逗号分隔列表 ($) 。

使用 Mode 参数确定触发断点的访问模式。 默认模式 Write 会在新值写入变量前停止执行。

Type:String[]
Aliases:V
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

输入

None

不能通过管道将输入传递给 Set-PSBreakpoint

输出

CommandBreakpoint

LineBreakpoint

VariableBreakpoint

Set-PSBreakpoint 返回一个 对象,该对象表示它设置的每个断点。

备注

  • Set-PSBreakpoint 无法在远程计算机上设置断点。 若要在远程计算机上调试脚本,请将该脚本复制到本地计算机,然后从本地进行调试。
  • 在多个行、命令或变量上设置断点时, Set-PSBreakpoint 会为每个条目生成一个断点对象。
  • 当在命令提示符下在函数或变量上设置断点时,你可以在创建函数或变量之前或之后设置断点。