我看到很多人发帖说他们得到了这样的错误,但似乎根本不知道如何找出错误的来源。
因此我想知道人们是否知道如何访问和使用堆栈跟踪。
那么你如何访问它,它对你意味着什么呢?
答案 0 :(得分:5)
当您收到如下所示的错误消息时,请点击查看详细信息.. 链接。
这将打开此属性框。
展开异常以显示详细信息并将鼠标悬停在StackTrace属性上。
你看到的大部分内容都可能是希腊语(向希腊朋友致歉),但如果你仔细观察,你会看到说明的行
at“NAME OF A MODULE”:第230行(或任何地方)
跟踪中的第一行是最终崩溃代码的行。只需在代码中找到该行并尝试找出该特定行导致指定错误的原因。
该格式的后续行是代码中从上面调用上面列出的例程的点。
现在上面的图像不是一个很好的例子,因为IDE调试器在错误行停止了。但无论如何,当您在try / catch语句中正确捕获错误时,堆栈跟踪非常有用。异常的一个属性是stack-trace ..查看它或将其转储到即时窗口。
Try
Catch ex As Exception
Debug.Print(ex.StackTrace)
End Try
此外,在运行exe版本时,请熟悉详细信息窗格。它的堆栈跟踪相同。
答案 1 :(得分:1)
错误的堆栈跟踪可以通过任何异常的StackTrace
property作为字符串进行访问。主要是你从Try/Catch
statement中捕获的异常中获取它,但你也可以通过AppDomain.UnhandledException
event从未处理的异常中获取它:
'Somewhere in your code, preferrably at startup.
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf AppDomain_UnhandledException
'The event handler.
Private Sub AppDomain_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs)
Dim ex As Exception = DirectCast(e.ExceptionObject, Exception) 'Cast the ExceptionObject into an Exception.
MessageBox.Show("An unhandled exception occurred. Stack Trace:" & Environment.NewLine & ex.StackTrace)
End Sub
Stack Trace告诉您发生异常的位置以及调用哪些方法以达到该点。如果您在自己的机器上进行调试,堆栈跟踪还将显示调用的文件名和行号。
Stack Trace的一个例子可能是:
at MyProject.CustomClass.PerformActions(Int32 ID) in C:\Projects\MyProject\CustomClass.vb:line 12
at MyProject.MainForm.CheckStatus() in C:\Projects\MyProject\MainForm.vb:line 65
at MyProject.MainForm.Button1_Click(Object sender, EventArgs e) at C:\Projects\MyProject\MainForm.vb:line 33
Stack Trace的每一行代表一个在当前调用层次结构中调用的方法。第一行代表最新/当前的方法。
上面的堆栈跟踪示例告诉您错误发生在PerformActions
文件的CustomClass.vb
方法的第12行。它还显示PerformAction
方法调用了MainForm.CheckStatus
方法,而{(1}}方法又通过点击Button1
来调用(大概)。