假设我有以下代码,当错误发生时,我希望看到错误首先发生在函数b,然后发生在函数a。但实际上它只告诉我错误发生在函数a,因为函数a可以多次调用,我不知道哪个外函数调用函数导致问题
cls
function a{
Remove-Item "not-exist-item"
}
function b{
a
}
b
Remove-Item : Cannot find path 'C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\not-exis t-item' because it does not exist. At C:\Users\Daniel.Wu\AppData\Local\Temp\2\a.ps1:***3 char:14*** + Remove-Item <<<< "not-exist-item" + CategoryInfo : ObjectNotFound: (C:\Program File...\not-exist-item:String) [Remove-Item], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
答案 0 :(得分:5)
如果您使用的是PowerShell v2.0,请使用Get-PSCallStack
。如果你还在v1上,请使用如下函数:
function Get-CallStack {
trap { continue }
1..100 | foreach {
$var = Get-Variable -scope $_ MyInvocation
$var.Value.PositionMessage -replace "`n"
}
}
答案 1 :(得分:4)
一个选项是设置
$ErrorActionPreference = 'inquire'
然后调用有问题的脚本。如果出现错误提示您选择,请选择Suspend
以进入嵌套提示模式。然后输入
Get-PSCallStack
甚至
Get-PSCallStack | fl
获取当前的调用堆栈信息。
答案 2 :(得分:1)
get-help about_debuggers是否提供任何照明?