【发布时间】:2019-07-28 20:59:51
【问题描述】:
我在代码窗口中打开了 PowerShell 脚本。我正在从终端启动相同的脚本,并希望它在调试模式下运行。这意味着:脚本将在断点处停止。
描述的行为类似于 PowerShell ISE。 但是,它会运行整个脚本而不会在断点处停止。
有没有办法在终端启动时实现脚本调试?
【问题讨论】:
标签: powershell debugging visual-studio-code
我在代码窗口中打开了 PowerShell 脚本。我正在从终端启动相同的脚本,并希望它在调试模式下运行。这意味着:脚本将在断点处停止。
描述的行为类似于 PowerShell ISE。 但是,它会运行整个脚本而不会在断点处停止。
有没有办法在终端启动时实现脚本调试?
【问题讨论】:
标签: powershell debugging visual-studio-code
当您执行 PowerShell 控制台时,您可以使用以下命令在脚本中的给定代码行设置断点,然后指定脚本。当您的脚本运行时,它将在您请求的给定点中断。
Set-PSBreakpoint -Line 9 -Script C:\temp\test_script.ps1
【讨论】:
不幸的是,从 PowerShell extension for Visual Studio Code 的 v2019.5.0 开始,不支持通过外部控制台窗口进行调试。
支持此方案的长期功能请求位于 this GitHub issue,但尚未实施 - 我建议您在此处对提案进行投票。
更新:我好像是improvements are now actively being worked on。
解决方法,自 v2019.5.0 起:
在 Windows 上,仅使用外部 PowerShell Core 控制台:
打开脚本所在的文件夹进行编辑,而不仅仅是脚本文件本身。
切换到调试视图(视图 > 调试)
如果左上角的下拉列表显示No Configurations,请单击其右侧的齿轮图标:
PowerShell。.vscode/launch.json 文件,其中包含调试视图下拉列表中提供的选项的调试启动配置。在下拉列表中选择PowerShell Attach to Host Process。
除了需要在以后的会话中打开整个文件夹之外,上述步骤应该只需要一次。
启动调试会话:
注意:调试需要运行 PowerShell 集成控制台,目前无法自动确保。如果您在编辑器中至少激活一次 PowerShell 脚本,则会启动 PowerShell 集成控制台,如集成终端右上角显示活动 shell 的下拉列表中所示。
按 F5(调试 > 开始调试)。
系统将提示您附加要附加到的目标进程: 选择要附加到的 PowerShell Core 会话;所有此类会话都以pwsh 为前缀,并显示它们的控制台窗口标题以及PID(进程ID);如有疑问,请在目标控制台窗口中执行$PID 以确定其PID。
选择运行空间 1 作为目标运行空间(即使它显示为Busy)。
.vscode/launch.json 中的启动配置中来跳过此步骤:将以下行添加到定义配置 "PowerShell Attach to Host Process" 的 JSON 对象中:"runspaceId": 1
调试器现在应该连接到您的外部 PowerShell Core 控制台,这反映在集成终端的状态输出中。
请注意,Visual Studio Code 不会在调试器遇到断点时自动激活,并且在恢复执行时也不会自动停用 - 您必须在外部控制台之间手动切换和 Visual Studio 代码。
切换到外部 PowerShell Core 控制台并调用要调试的脚本。
PSConsoleHostReadLine函数结束时要停止调试,请使用 Shift+F5(调试 > 停止调试)或按调试工具栏上的断开连接图标(显示红色插头)。
在其他平台上使用 Windows PowerShell / 与当前功能最接近的是使用 集成 em> 终端,而是通过调试启动配置 PowerShell Interactive Session。
注意:macOS 和 Linux 上的 PowerShell Core应该支持上面描述的 Windows 调试技术,但这对我的 macOS 10.14.6 机器上的 PowerShell Core 7.0.0 不起作用-预览.2; YMMV。
限制是:
PSReadLine 功能将不可用 - 特别是无法使用向上箭头键调用命令。
集成终端与编辑器窗口共享 Visual Studio Code 窗口,因此您无法将终端弹出到可以放置在单独监视器上的单独窗口中。
【讨论】: