在PowerShell中使用pdb.set_trace()进入调试交互控制台

2 投票
2 回答
628 浏览
提问于 2025-04-17 16:29

在PowerShell中有没有类似于Python的pdb.set_trace()的功能?

我想在脚本的某一行停止执行,然后进入调试器的交互式控制台。(我更希望不使用ISE)

我看到有一个Set-PSBreakpoint的命令,但这个命令需要指定脚本和行号。

2 个回答

1

好的,在PowerShell中,跟Python里的pdb.set_trace()相对应的命令是:

function Set-Trace {
  Set-PSBreakPoint -Line ($MyInvocation.ScriptLineNumber + 1) -Script $MyInvocation.ScriptName
}

不过,不像Python那样,在PowerShell中,一旦你安装了这个跟踪功能,它会一直存在,直到你结束你的PowerShell会话。所以我建议你在脚本的开头加上这个命令,以便清除旧的跟踪记录:

function Remove-AllTraces {
  Get-PSBreakpoint | Remove-PSBreakpoint
}

非常感谢@Richard的建议。:)

4

我最喜欢的是

$Host.EnterNestedPrompt()

就这一行代码。你的脚本会在这里暂停,然后你会进入一个命令行界面,可以查看变量等内容。当你完成后,只需退出这个命令行,脚本就会继续执行。我以前有时候会把这些代码留在那儿,所以现在我总是:

######## DEBUG ##########
$Host.EnterNestedPrompt()
######## END DEBUG ##########

这样我就能在完成后轻松找到(并删除)它们。

撰写回答