配置 VSCode 的 PowerShell 扩展,以默认显示脚本终止错误的脚本堆栈跟踪

Configure VSCode's PowerShell extension to show a script stacktrace by default for script-terminating errors

提问人:zett42 提问时间:11/17/2023 最后编辑:zett42 更新时间:11/17/2023 访问量:25

问:

虽然这是一个自我回答的问题,但如果它提供了额外的价值,请随时添加您自己的答案。


VSCode 的 PowerShell 扩展的集成控制台中显示的脚本终止错误的默认输出对调试不是很有帮助。它只显示错误消息和错误来源的行(在模块函数的情况下,甚至不是实际的行,而只是调用方的位置)。

除了错误消息之外,我真正希望看到的是完整的脚本堆栈跟踪而不必为每个脚本添加异常处理代码

例:

Function Test-Me { 
    Test-You
}

Function Test-You {
    throw 'foo error'
}

Test-Me

实际输出:

Exception: C:\Test.ps1:6:2
Line |
   6 |      throw 'foo error'
     |      ~~~~~~~~~~~~~~~~~
     | foo error

期望输出:

Exception: C:\Test.ps1:6:2
Line |
   6 |      throw 'foo error'
     |      ~~~~~~~~~~~~~~~~~
     | foo error

at Test-You, C:\Test.ps1: line 6
at Test-Me, C:\Test.ps1: line 2
at <ScriptBlock>, C:\Test.ps1: line 10
at <ScriptBlock>, <No file>: line 1

虽然这样的输出可以通过如下所示的异常处理代码轻松实现,但将此样板代码添加到我需要调试的每个小代码片段中太麻烦了。

try {
    Test-Me
}
catch {
    $_ | Out-Host
    Write-Debug "`n$($_.ScriptStackTrace)" -Debug
}

虽然有一种简单的方法可以(也)显示脚本堆栈跟踪,但它会导致错误输出过于混乱,显示的信息比需要的信息多得多:

# At the top of the script
$ErrorView = 'DetailedView'

有没有办法配置 VSCode 的 PowerShell 扩展以生成所需的输出?

PowerShell visual-studio-code 调试 powershell-7

评论


答:

1赞 zett42 11/17/2023 #1

一个简单的解决方案是添加一个“launch.json”文件。这对我来说很有效,因为我将所有的小片段保存在一个文件夹中。

  1. 从文件夹的上下文菜单中打开 VSCode,或正常启动 VSCode 并从“文件”>打开文件夹”菜单项打开文件夹
  2. 打开“运行和调试”选项卡。
  3. 单击“创建 launch.json 文件”链接,选择“PowerShell”,然后选择“启动当前文件”。这将创建一个默认的 launch.json 文件。
  4. 修改属性以将脚本调用包装在异常处理程序中。我的自定义launch.json如下所示:script
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "PowerShell: Launch Current File",
                "type": "PowerShell",
                "request": "launch",
                "script": "try { & ${file} } catch { $_ | Out-Host; Write-Debug -Debug (\"`n\" + $_.ScriptStackTrace) }",
                "args": []
            }
        ]
    }
    
  5. 保存 launch.json,它应该自动保存在 .vscode 子文件夹中。

执行这些步骤后,当发生脚本终止错误时,通过 启动的每个脚本都会生成所需的输出。您甚至可以 +单击堆栈跟踪的一行以直接跳转到引用的代码位置。F5Ctrl

VSCode terminal