从终端调试Visual Studio代码PowerShell代码

从终端调试Visual Studio代码PowerShell代码,powershell,debugging,visual-studio-code,Powershell,Debugging,Visual Studio Code,我已在代码窗口中打开PowerShell脚本。我正在从终端启动相同的脚本,并希望它在调试模式下运行。这意味着:脚本将在断点处停止 所描述的行为类似于PowerShell ISE。 但是,它运行整个脚本时不会在断点处停止 从终端启动时,是否有方法实现脚本调试?执行PowerShell控制台时,可以使用下面的此命令在脚本中的给定代码行设置断点,然后指定脚本。当脚本运行时,它将在您请求的给定点中断 Set-PSBreakpoint -Line 9 -Script C:\temp\test_scrip

我已在代码窗口中打开PowerShell脚本。我正在从终端启动相同的脚本,并希望它在调试模式下运行。这意味着:脚本将在断点处停止

所描述的行为类似于PowerShell ISE。 但是,它运行整个脚本时不会在断点处停止


从终端启动时,是否有方法实现脚本调试?

执行PowerShell控制台时,可以使用下面的此命令在脚本中的给定代码行设置断点,然后指定脚本。当脚本运行时,它将在您请求的给定点中断

Set-PSBreakpoint -Line 9  -Script C:\temp\test_script.ps1

不幸的是,从的v2019.5.0起,不支持通过外部控制台窗口进行调试。

支持此方案的长期功能请求已提出,但尚未实施-我建议您在那里投票支持该方案。
更新:我似乎是这样

变通办法,自2019.5.0版起:

在Windows上,仅使用外部PowerShell Core控制台

  • 打开脚本所在的文件夹进行编辑,而不仅仅是脚本文件本身

  • 切换到调试视图(视图>调试)

  • 如果左上角的下拉列表显示
    无配置
    ,请单击其右侧的齿轮图标:

    • 如果提示输入环境,请选择
      PowerShell
    • 将在文件夹中创建一个
      .vscode/launch.json
      文件,其中包含调试启动配置,这些配置位于“调试”视图下拉列表中提供的选项之下
  • 在下拉列表中选择PowerShell连接到主机进程

除了需要在以后的会话中打开整个文件夹外,上述步骤只需执行一次

要启动调试会话,请执行以下操作:

注意:调试需要运行PowerShell集成控制台,但目前无法自动确保。如果在编辑器中激活PowerShell脚本至少一次,将启动PowerShell集成控制台,如集成终端右上角显示活动外壳的下拉列表所示

  • 按F5(调试>开始调试)

  • 系统将提示您指定要附加到的目标进程:选择要附加到的PowerShell核心会话;所有此类会话都以
    pwsh
    作为前缀,并显示其控制台窗口标题以及PID(进程ID);如有疑问,请在目标控制台窗口中执行
    $PID
    ,以确定其PID

  • 选择运行空间1作为目标运行空间(即使它说的是
    Busy

    • 注意:您可以通过在
      .vscode/launch.json
      中将运行空间1的使用硬编码到您的启动配置中来跳过这一步:在定义配置的json对象中添加以下行
      “PowerShell连接到主机进程”
      “runspaceId”:1
调试器现在应连接到外部PowerShell Core控制台,如集成终端中的状态输出所示

请注意,当调试器遇到断点时,Visual Studio代码不会自动激活,当执行恢复时,它也不会自动停用-您必须在外部控制台和Visual Studio代码之间手动切换

  • 切换到外部PowerShell Core控制台并调用要调试的脚本

    • 在会话中的第一次,调试器将立即中断,即在
      PSConsoleHostReadLine
      函数的末尾
    • 从那里开始单步执行脚本,或者只需按F5(调试>继续)继续执行,直到命中以前设置的断点
  • 要停止调试,请使用Shift+F5(调试>停止调试)或按调试工具栏上的断开图标(显示红色插头)


使用Windows PowerShell/在其他平台上当前功能最接近的方法是通过调试启动配置
PowerShell交互式会话
使用集成终端

注意:macOS和Linux上的PowerShell Core应支持上述针对Windows的调试技术,但这在我的macOS 10.14.6机器上不适用,该机器带有PowerShell Core 7.0.0-preview。2;YMMV

这些限制是:

  • PSReadLine功能将不可用-尤其是不使用向上箭头键调用命令

  • 集成终端与编辑器窗口共享VisualStudio代码窗口,因此您不能将终端弹出到可以放置在单独显示器上的单独窗口


谢谢您的回答。不幸的是,该语句没有启动调试会话或至少与我从代码窗口启动的会话类似的会话。是的,我的解决方案必须独立于VS控制台运行,而不是在PowerShell控制台窗口中运行。相反,使用ISE将为您提供完整的调试功能,但您必须在窗口之间手动跳转。