[Mono-dev] Mono/.NET Framework Very Different Stack Traces
Bryan Murphy
bmurphy1976 at gmail.com
Tue Dec 14 14:27:40 EST 2010
I have a very simple test program:
01 using System;
02
03 public static class Program {
04 public static void ThrowCatchRethrow() {
05 try {
06 throw new InvalidOperationException();
07 } catch (Exception) {
08 throw;
09 }
10 }
11
12 public static void Main(string[] args) {
13 try {
14 ThrowCatchRethrow();
15 } catch (Exception ex) {
16 Console.Error.WriteLine(ex);
17 }
18 }
19 }
I compile this using the following:
$ gmcs -debug -out:ExceptionTest.exe ExceptionTest.cs
$ csc.exe /debug /out:ExceptionTest.exe ExceptionTest.cs
When I execute it under the .NET framework, I get the following stack trace:
$ ./ExceptionTest.exe
System.InvalidOperationException: Operation is not valid due to the current
state of the object.
at Program.ThrowCatchRethrow() in
u:\Workspace\MonoTest\ExceptionTest.cs:line 8
at Program.Main(String[] args) in
u:\Workspace\MonoTest\ExceptionTest.cs:line 14
When I execute it under Mono, I get the following:
$ mono --debug ./ExceptionTest.exe
System.InvalidOperationException: Operation is not valid due to the current
state of the object
at Program.ThrowCatchRethrow () [0x00000] in
U:\Workspace\MonoTest\ExceptionTest.cs:6
Here you can clearly see that the stack traces are *very* different. In
fact, while it's nice that Mono shows line #06 as the place where the
exception is actually thrown, it loses the fact that line #14 was also part
of the stack at the time of the error.
The .NET framework shows line #08 as the place where the exception was
thrown, which is not ideal, however it includes line #14 which is what I
really want.
Is there a way we can get the stack traces to look more like the .NET
framework stack traces? I actually find it significantly easier to track
down the location of a problem when presented with the .NET stack trace.
I know I can wrap and rethrow, but that loses the type of the initial
exception so it's not a feasible solution. We're going to add a centralized
logging service and audit our code to try and track down these issues,
however, that's a rather painful way to go about this and we keep running
into this problem again and again.
Thanks,
Bryan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20101214/65b7ad39/attachment.html
More information about the Mono-devel-list
mailing list