Mono has an strace-like feature built into the runtime. This is useful to see which methods are being called by your application, just invoke Mono with --trace.
Our upcoming version has a neat new feature, when you use --trace=E:ExceptionName or --trace=E:all you get a stack trace of where the exception was thrown from:
$ gmcs.exe mono$ gmcs missing.cs error CS2001: Source file `missing.cs' could not be found Compilation failed: 1 error(s), 0 warnings
And now with tracing enabled, we do it setting the MONO_ENV_OPTIONS variable:
mono$ MONO_ENV_OPTIONS=--trace=E:all gmcs missing.cs[0xb75136f0:] EXCEPTION handling: System.IO.FileNotFoundException: Could not find file "missing.cs". "{unnamed thread}" tid=0x0xb75136f0 this=0x0x53f18 thread handle 0x403 state : not waiting owns () at System.IO.FileStream..ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,int,bool,System.IO.FileOptions) {0x00619} at System.IO.FileStream..ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare) {0x00022} at (wrapper remoting-invoke-with-check) System.IO.FileStream..ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare) {0x0004f} at System.IO.File.OpenRead (string) {0x0002c} at Mono.CSharp.Driver.Parse (Mono.CSharp.CompilationUnit) {0x00016} at Mono.CSharp.Driver.Parse () {0x00068} at Mono.CSharp.Driver.Compile () {0x00098} at Mono.CSharp.Driver.Main (string[]) {0x000a2} at (wrapper runtime-invoke) {Module}.runtime_invoke_int_object (object,intptr,intptr,intptr) {0x00033} error CS2001: Source file `missing.cs' could not be found Compilation failed: 1 error(s), 0 warnings
Posted on 21 Jul 2010