2011-01-20 6 views
5

supponiamo di avere il seguente codice, quando si verifica l'errore, mi piacerebbe vedere l'errore che si è verificato per la prima volta nella funzione b, e poi è successo alla funzione a. Ma in realtà mi dice che solo l'errore accadere in funzione di una, dal momento che la funzione di un potrebbe essere chiamato molte volte, non so quale funzione esterna chiamando la funzione di un causato il problemapowershell: come stampare gli stack totali delle chiamate quando si verifica un errore?

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 

risposta

5

Se si utilizza PowerShell v2.0, utilizzare Get-PSCallStack. Se siete ancora sulla v1, utilizzare una funzione come questa:

function Get-CallStack { 
    trap { continue } 
    1..100 | foreach { 
     $var = Get-Variable -scope $_ MyInvocation 
     $var.Value.PositionMessage -replace "`n" 
    } 
} 
1

Get-help about_debuggers fornisce illuminazione?

4

Una possibilità è quella di impostare

$ErrorActionPreference = 'inquire' 

e poi richiamare lo script problematico. In caso di errore viene richiesto di scegliere, selezionare Suspend per entrare nella modalità prompt nidificata. Quindi digitare

Get-PSCallStack 

o anche

Get-PSCallStack | fl 

per ottenere le informazioni di stack di chiamate in corso.

Problemi correlati