惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
小众软件
小众软件
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
Jina AI
Jina AI
博客园 - 【当耐特】
V
Visual Studio Blog
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
量子位
IT之家
IT之家
G
Google Developers Blog
V
V2EX
The GitHub Blog
The GitHub Blog
月光博客
月光博客
GbyAI
GbyAI

博客园 - 回头重来

开发语言排名 释放C盘空间 窗体最小化后隐藏了再显示的小问题 用脚本修改数据库名和逻辑文件名 第一次尝试NHibernate winForm中使用log4net [转]SQL Server 管理技巧 [转]SQL Server开发技巧 [转]十二个笑话中的人生哲理 [转]Google Talk 的几点使用技巧 Google Talk Themes 需要GMail邀请的朋友请进来 将15位的身份证号码升级到18位的关键是校验码 让VBCommenter支持自定义用户名 简单的方向按钮 如何改变TextBox的高度 增强TextBox 增强TextBox (可以对TextBox的内容进行自我验证的自定义控件) 看图测试心理承受力(转载)
在被调用函数中利用StackTrace确定是被哪个函数调用的
回头重来 · 2005-04-24 · via 博客园 - 回头重来

代码很简单,如下

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

End Module


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

    
End Sub


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

刚才看下面的文章想到的

Find out what's closing your application
他的代码如下:

Private Sub Form1_Closing(ByVal sender As Object, _
  
ByVal e As System.ComponentModel.CancelEventArgs) _
  
Handles MyBase.Closing
    
Dim O As System.Diagnostics.StackTrace = _
           
New System.Diagnostics.StackTrace(True)
    
Dim F As System.Diagnostics.StackFrame

    F 
= O.GetFrame(7)

    
Select Case F.GetMethod.Name.ToString
        
Case "SendMessage"
            MsgBox("Closing because of call in code.")
        
Case "CallWindowProc"
            MsgBox("Closing because of system menu click.")
        
Case "DispatchMessageW"
            MsgBox("Closing because of Task Manager.")
        
Case Else
            
MsgBox("Don't Know why I'm closing!!??")
    
End Select
End Sub