我有一个VB.NET 2010
Winforms应用程序,我想在堆栈跟踪中包含行号.我已经阅读了以下问题和答案:
how to print out line number during application run in VB.net
其中提到“您总是需要将PDB文件与您的代码一起包含,其中包含在这种情况下使用的调试信息”.在高级编译器设置下,我已经尝试将“生成调试信息”为“pdb-only”和“full”作为我的发行版本,并确认在与EXE相同的目录中生成了一个新的PDB文件.但是,以下测试代码为每个堆栈帧生成零行数,并且不返回文件名:
Dim st As StackTrace = New StackTrace(ex) For Each sf As StackFrame In st.GetFrames MsgBox("Line " & sf.GetFileLineNumber() & sf.GetFileName) Next
然而,以下代码直接生成另外一个好看的堆栈跟踪,因此它似乎不是一般的异常处理程序的问题:
ExceptionDetails.Text = ex.GetType.ToString & "(0x" & hr.ToString("X8") & "): " & ex.Message & vbCrLf & ex.StackTrace
我似乎没有找到项目配置中的其他任何可能的设置,并想知道是否有人有其他可能导致此问题的想法.我发现在这里和其他地方搜索的所有解决方案似乎建议确保PDB与可执行文件处于相同的路径.
从您打电话的构造函数的
documentation:
原文链接:https://www.f2er.com/vb/255088.htmlThe StackTrace is created with the caller’s current thread,and does not contain file name,line number,or column information.
尝试使用:
Dim st As StackTrace = New StackTrace(ex,True)
而是使用this constructor.第二个构造函数参数描述为:
true to capture the file name,and column number; otherwise,false.