【问题标题】:Visual Studio Code PowerShell code debugging from the terminal从终端调试 Visual Studio Code PowerShell 代码
【发布时间】:2019-07-28 20:59:51
【问题描述】:

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

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

有没有办法在终端启动时实现脚本调试?

【问题讨论】:

    标签: powershell debugging visual-studio-code


    【解决方案1】:

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

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

    【讨论】:

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

    不幸的是,从 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)。

      • 注意:您以后可以通过将运行空间 1 的使用硬编码到 .vscode/launch.json 中的启动配置中来跳过此步骤:将以下行添加到定义配置 "PowerShell Attach to Host Process" 的 JSON 对象中:"runspaceId": 1

    调试器现在应该连接到您的外部 PowerShell Core 控制台,这反映在集成终端的状态输出中。

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

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

      • 会话中的第一次时间,调试器将立即中断,即在PSConsoleHostReadLine函数结束时
      • 要么从那里开始单步执行您的脚本,要么直接按 F5(调试 > 继续)继续执行,直到命中之前设置的断点。
    • 要停止调试,请使用 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 窗口,因此您无法将终端弹出到可以放置在单独监视器上的单独窗口中。

    【讨论】:

      猜你喜欢
      • 2023-02-02
      • 2021-05-26
      • 1970-01-01
      • 2016-09-16
      • 2019-04-03
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多