【问题标题】:powershell capture call stack after an error is thrown抛出错误后powershell捕获调用堆栈
【发布时间】:2011-01-26 14:03:35
【问题描述】:

我想做这样的事情......

try  
{  
    # Something in this function throws an exception
    Backup-Server ...  
}catch  
{  
    # Capture stack trace of where the error was thrown from
    Log-Error $error 
}

理想情况下,我想捕获函数的参数和行号等(就像您在 get-pscallstack 中看到的那样)
编辑:澄清一下,这是我想要的不是 .NET 的 powershell 堆栈跟踪
任何想法如何实现这一目标?
戴夫

【问题讨论】:

    标签: powershell error-handling callstack


    【解决方案1】:

    最后一个错误出现在:

    $error[0]
    

    那里有很多好信息供您追踪,包括异常堆栈跟踪。这是一个方便的小脚本(PSCX 附带的 Resolve-ErrorRecord),它显示了关于最后一个错误的大量有用信息:

    param(
        [Parameter(Position=0, ValueFromPipeline=$true)]
        [ValidateNotNull()]
        [System.Management.Automation.ErrorRecord[]]
        $ErrorRecord
    )
    process {
    
            if (!$ErrorRecord)
            {
                if ($global:Error.Count -eq 0)
                {
                    Write-Host "The `$Error collection is empty."
                    return
                }
                else
                {
                    $ErrorRecord = @($global:Error[0])
                }
            }
            foreach ($record in $ErrorRecord)
            {
                $record | Format-List * -Force
                $record.InvocationInfo | Format-List *
                $Exception = $record.Exception
                for ($i = 0; $Exception; $i++, ($Exception = $Exception.InnerException))
                {
                    "$i" * 80
                   $Exception | Format-List * -Force
                }
            }
    
    }
    

    【讨论】:

    • 谢谢,这正是我要找的东西,事实证明这或多或少是我在看的东西,但我抛出的错误类型掩盖了我需要的信息
    【解决方案2】:

    您不需要像 Keith 的回答那样多的代码。

    $error[0].ErrorRecord.ScriptStackTrace
    

    是你想要的。

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 2016-06-11
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2019-08-04
      • 1970-01-01
      相关资源
      最近更新 更多