PowerShell 技能连载 - Get-PSCallStack 和调试
在前一个技能中我们使用 Get-PSCallStack
来确定代码的“调用深度”。今天我们来看看如何使用这个 cmdlet 来帮助调试。要演示这个功能,请将以下代码保存为一个脚本文件。将它保存为一个 ps1 文件十分重要。请在 PowerShell ISE 中执行它。
1 | function test1 |
test1
调用了 test2
,并且在 test2
中,有一个 Wait-Debugger
调用。这个 cmdlet 是从 PowerShell 5 开始引入的。它会导致代码暂停并调用调试器。如果您使用的是一个早版本的 PowerShell,那么可以通过 F9
键设置一个断点。当您运行这段代码时,调试器会在 Get-Process
正要执行之前暂停,并且该行代码会以黄色高亮(如果没有效果,请检查是否已将代码保存为文件?)。
在交互式的 PowerShell 控制台中,您现在可以键入 Get-PSCallStack
来检查在代码块中停在哪里:
[DBG]: PS C:\>> Get-PSCallStack
Command Arguments Location
------- --------- --------
test2 {} a1.ps1: Line 11
test1 {} a1.ps1: Line 5
a1.ps1 {} a1.ps1: Line 14
输出结果显示您当前位于函数 test2
中,它是被 test1
调用,而 test1
是被 a1.ps1
调用。
您还可以通过 InvocationInfo
属性看到更多的信息:
1 | [DBG]: PS C:\>> Get-PSCallStack | Select-Object -ExpandProperty InvocationInfo |