PowerShell: как распечатать общее количество вызовов при возникновении ошибки? - PullRequest
5 голосов
/ 21 января 2011

предположим, у меня есть следующий код, когда возникает ошибка, я хотел бы увидеть ошибку, которая сначала произошла в функции b, а затем произошла в функции a.Но на самом деле это только говорит мне, что ошибка произошла в функции 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

Ответы [ 3 ]

5 голосов
/ 21 января 2011

Если вы используете PowerShell v2.0, используйте Get-PSCallStack. Если вы все еще на v1, используйте функцию, подобную этой:

function Get-CallStack {
    trap { continue }
    1..100 | foreach {
        $var = Get-Variable -scope $_ MyInvocation
        $var.Value.PositionMessage -replace "`n"
    }
}
4 голосов
/ 21 января 2011

Один из вариантов - установить

$ErrorActionPreference = 'inquire'

, а затем вызвать проблемный скрипт.В случае ошибки вам будет предложено сделать выбор, выберите Suspend, чтобы войти в режим вложенного приглашения.Затем введите

Get-PSCallStack

или даже

Get-PSCallStack | fl

, чтобы получить информацию о текущем стеке вызовов.

1 голос
/ 21 января 2011

Предоставляет ли get-help about_debuggers какое-либо освещение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...