2011-01-20 31 views
5

giả sử tôi có mã sau, khi lỗi xảy ra, tôi muốn thấy lỗi xảy ra lần đầu tiên ở hàm b, và sau đó xảy ra ở hàm a. Nhưng trong thực tế, nó chỉ nói với tôi những lỗi xảy ra ở chức năng một, vì chức năng một có thể được gọi nhiều lần, tôi không biết đó là ngoài chức năng gọi hàm một gây ra vấn đềpowershell: cách in tổng số ngăn xếp cuộc gọi khi xảy ra lỗi?

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 

Trả lời

5

Nếu bạn đang sử dụng PowerShell phiên bản 2.0, hãy sử dụng Get-PSCallStack. Nếu bạn vẫn còn trên v1, sử dụng một chức năng như thế này:

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

Trợ giúp get_debuggers có cung cấp bất kỳ sự chiếu sáng nào không?

4

Một lựa chọn là để thiết lập

$ErrorActionPreference = 'inquire' 

và sau đó gọi kịch bản có vấn đề. Khi bạn được nhắc về các lựa chọn, hãy chọn Suspend để nhập vào chế độ nhắc nhở lồng nhau. Sau đó gõ

Get-PSCallStack 

hoặc thậm chí

Get-PSCallStack | fl 

để có được thông tin cuộc gọi chồng hiện tại.

Các vấn đề liên quan