在被调用函数中利用StackTrace确定是被哪个函数调用的

代码很简单,如下
ExpandedBlockStart.gif ContractedBlock.gif Module Module1 Module Module1
ExpandedSubBlockStart.gifContractedSubBlock.gif    
Public Sub ReportPosition()Sub ReportPosition(ByVal msg As String)
InBlock.gif        
Dim strace As New StackTrace(True)
InBlock.gif        
Dim frame As New StackFrame
InBlock.gif        frame 
= strace.GetFrame(1'0表示调用堆栈的最里层(本函数),1表示上一层也就是调用ReportPosition()的函数,dot.gif 
InBlock.gif
        MsgBox("错误信息:" & msg & ControlChars.CrLf & "位置:" & frame.ToString)
InBlock.gif        
'可以将frame.ToString()的内容保存到文件
InBlock.gif
        '在trydot.gifcatch中调用该方法可以方便跟踪异常位置
ExpandedSubBlockEnd.gif
    End Sub

ExpandedBlockEnd.gif
End Module

None.gif
None.gif    
' 调用
ExpandedBlockStart.gifContractedBlock.gif
     Private   Sub Button1_Click() Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
InBlock.gif        
Try
InBlock.gif            
'do something
InBlock.gif
            Dim i As Int32 = 0
InBlock.gif            i 
= 1 / i
InBlock.gif        
Catch ex As Exception
InBlock.gif            ReportPosition(ex.Message)
InBlock.gif        
End Try
InBlock.gif
ExpandedBlockEnd.gif    
End Sub

 

不过只有在Debug模式并且有.pdb文件的情况下才能获得调用函数的所在的文件和行号。

刚才看下面的文章想到的
Find out what's closing your application
他的代码如下:

ExpandedBlockStart.gif ContractedBlock.gif Private   Sub Form1_Closing() Sub Form1_Closing(ByVal sender As Object, _
InBlock.gif  
ByVal e As System.ComponentModel.CancelEventArgs) _
InBlock.gif  
Handles MyBase.Closing
InBlock.gif    
Dim O As System.Diagnostics.StackTrace = _
InBlock.gif           
New System.Diagnostics.StackTrace(True)
InBlock.gif    
Dim F As System.Diagnostics.StackFrame
InBlock.gif
InBlock.gif    F 
= O.GetFrame(7)
InBlock.gif
InBlock.gif    
Select Case F.GetMethod.Name.ToString
InBlock.gif        
Case "SendMessage"
InBlock.gif
            MsgBox("Closing because of call in code.")
InBlock.gif        
Case "CallWindowProc"
InBlock.gif
            MsgBox("Closing because of system menu click.")
InBlock.gif        
Case "DispatchMessageW"
InBlock.gif
            MsgBox("Closing because of Task Manager.")
InBlock.gif        
Case Else
InBlock.gif            
MsgBox("Don't Know why I'm closing!!??")
InBlock.gif    
End Select
ExpandedBlockEnd.gif
End Sub

转载于:https://www.cnblogs.com/hudan/archive/2005/04/24/144547.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值