C# stack traces take the following form:
at Foo.Core.Test.FinalMethod(Doh doh) in C:\Projects\src\Core.Tests\Test.cs:line 21
at Foo.Core.Test.AnotherMethod(Bar bar)
at Foo.Core.Test.AMethod() in C:\Projects\src\Core.Tests\Test.cs:line 6
at Foo.Core.Test.<>c__DisplayClass7.<SomeAnonDelegate>b__6(Object _) in C:\Projects\src\Core.Tests\Test.cs:line 35
How can I retrieve namespace, class, method, file and line number from each line?
Would appreciate some ideas and input.
If you're getting this from a StackTrace, then you can loop through the StackFrames via GetFrame and call GetMethod, GetFileName, and GetFileLineNumber. Namespace and class can be retrieved from the method.
EDIT
In response to the first comment (unfortunately we get the traces from Exception.StackTrace), you can call the StackTrace(Exception) constructor.
EDIT
I should've linked to this constructor instead -- StackTrace(Exception,bool).
I read the Austin Salonen's answer and it's obvious better, but I've already started with regex. so I'll write it anyway.
Regex r = new Regex(@"at (?<namespace>.*)\.(?<class>.*)\.(?<method>.*(.*)) in (?<file>.*):line (?<line>\d*)");
var result = r.Match(@"at Foo.Core.Test.FinalMethod(Doh doh) in C:\Projects\src\Core.Tests\Test.cs:line 21");
if (result.Success)
{
string _namespace = result.Groups["namespace"].Value.ToString();
string _class = result.Groups["class"].Value.ToString();
string _method = result.Groups["method"].Value.ToString();
string _file = result.Groups["file"].Value.ToString();
string _line = result.Groups["line"].Value.ToString();
Console.WriteLine("namespace: " + _namespace);
Console.WriteLine("class: " + _class);
Console.WriteLine("method: " + _method);
Console.WriteLine("file: " + _file);
Console.WriteLine("line: " + _line);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With