2011-01-20 14 views
5

私は次のコードを持っていると仮定します。エラーが発生したとき、関数bでエラーが発生した後、関数aでエラーが発生したことを確認したいと思います。しかし、実際にはそれだけの関数aが何度も呼び出される可能性があるため、エラーが、関数Aで起こる、私は関数Aを呼び出し外側の関数が問題powershell:エラーが発生した場合の総コールスタックの印刷方法

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 

答えて

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
の原因となったかわからないと言われます

get-help about_debuggersは照明を提供しますか?

4

1つのオプションは、

$ErrorActionPreference = 'inquire' 

を設定し、問題のあるスクリプトを起動することです。エラーが発生した場合は、選択を求めるプロンプトが表示されます。Suspendを選択すると、ネストされたプロンプトモードに入ります。そして、現在のコールスタック情報を取得するために

Get-PSCallStack 

あるいは

Get-PSCallStack | fl 

を入力します。

関連する問題