从 C# WinForms 错误消息中提取特定信息
Pulling specific information from C# WinForms error messages
我在我的 C# WinForms 项目中设置了一个日志系统,该系统写入一个日志 txt 文件。典型的错误消息如下所示:
Error :
8:34:48 AM Tuesday, April 21, 2020
:
:System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.Collections.ArrayList.get_Item(Int32 index)
at System.Windows.Forms.DataGridViewColumnCollection.get_Item(Int32 index)
at CrossReferenceTool.frmXRefTool.DefineControlsLayout() in <PathToSourceCsFile>:line 306
有什么方法可以获取该错误消息的部分内容吗?具体来说,我想提取有问题的方法(在本例中为 DefineControlsLayout()
)和行号。
实例化一个新的 StackTrace 并在发生任何异常后从中记录详细信息。
示例代码
using System.Diagnostics;
try
{
throw new Exception("Fail");
}
catch (Exception e)
{
StackTrace st = new StackTrace(e);
// Display the most recent function call.
StackFrame sf = st.GetFrame(0);
Console.WriteLine();
Console.WriteLine(" Exception in method: ");
Console.WriteLine(" {0}", sf.GetMethod());
if (st.FrameCount > 1)
{
// Display the highest-level function call
// in the trace.
sf = st.GetFrame(st.FrameCount - 1);
Console.WriteLine(" Original function call at top of call stack):");
Console.WriteLine(" {0}", sf.GetMethod());
// will only work if .pdb is included
var lineNumber = sf.GetFileLineNumber();
var fileName = sf.GetFileName();
}
}
如果您已经捕获异常类型,那么您有子属性,例如
Exception.StackTrace
Exception.TargetSite
不过我认为您不能使用它们来拉取代码行。
我在我的 C# WinForms 项目中设置了一个日志系统,该系统写入一个日志 txt 文件。典型的错误消息如下所示:
Error :
8:34:48 AM Tuesday, April 21, 2020
:
:System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.Collections.ArrayList.get_Item(Int32 index)
at System.Windows.Forms.DataGridViewColumnCollection.get_Item(Int32 index)
at CrossReferenceTool.frmXRefTool.DefineControlsLayout() in <PathToSourceCsFile>:line 306
有什么方法可以获取该错误消息的部分内容吗?具体来说,我想提取有问题的方法(在本例中为 DefineControlsLayout()
)和行号。
实例化一个新的 StackTrace 并在发生任何异常后从中记录详细信息。
示例代码
using System.Diagnostics;
try
{
throw new Exception("Fail");
}
catch (Exception e)
{
StackTrace st = new StackTrace(e);
// Display the most recent function call.
StackFrame sf = st.GetFrame(0);
Console.WriteLine();
Console.WriteLine(" Exception in method: ");
Console.WriteLine(" {0}", sf.GetMethod());
if (st.FrameCount > 1)
{
// Display the highest-level function call
// in the trace.
sf = st.GetFrame(st.FrameCount - 1);
Console.WriteLine(" Original function call at top of call stack):");
Console.WriteLine(" {0}", sf.GetMethod());
// will only work if .pdb is included
var lineNumber = sf.GetFileLineNumber();
var fileName = sf.GetFileName();
}
}
如果您已经捕获异常类型,那么您有子属性,例如
Exception.StackTrace
Exception.TargetSite
不过我认为您不能使用它们来拉取代码行。