2011-01-20 14 views
5

Aşağıdaki kod var, hata oluştuğunda, hatanın ilk önce b işlevinde gerçekleştiğini ve sonra işlev a'da olduğunu görmek istiyorum. Ama aslında sadece işlevi defalarca denilebilir çünkü hata, işlev a gerçekleşmesi Bir sorunpowershell: hata oluştuğunda toplam çağrı yığınlarını nasıl yazdırılır?

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 

cevap

5

PowerShell v2.0 kullanıyorsanız, Get-PSCallStack'u kullanın. Eğer v1 kullanmaya devam ediyorsanız, böyle bir işlevi kullanın:

function Get-CallStack { 
    trap { continue } 
    1..100 | foreach { 
     $var = Get-Variable -scope $_ MyInvocation 
     $var.Value.PositionMessage -replace "`n" 
    } 
} 
1
neden çağırarak dış hangi işlevi işlevi bilmiyorum bana söyler

about_debuggers hakkında yardım almak herhangi bir aydınlatma sağlıyor mu?

4

Seçeneklerden biri

$ErrorActionPreference = 'inquire' 

ayarlayın ve sonra sorunlu senaryoyu çağırmaktır. Hata durumunda seçim yapmanız istenir, iç içe komut istemi moduna girmek için Suspend'u seçin. Sonra geçerli çağrı yığını bilgileri almak için

Get-PSCallStack 

hatta

Get-PSCallStack | fl 

yazın.

İlgili konular