* Debugging information Compile your programs using the `-g' flag in MCS, that will all a special resource containing debugging information to your executable. To get stack traces with line number information, you need to run your program like this: mono --debug program.exe Notice that the program will need to be compiled with the -g flag and that running with --debug will slow down the execution. * Debugging with GDB If you use GDB to debug your mono process, you can use the function mono_print_method_from_ip(void *address) to obtain the name of a method given an address. For example:
(gdb) where
#0  ves_icall_System_String_GetHashCode (me=0x80795d0) at string-icalls.c:861
#1  0x0817f490 in ?? ()
#2  0x0817f42a in ?? ()
#3  0x0817f266 in ?? ()
#4  0x0817f1a5 in ?? ()
You can now use:
(gdb) p mono_print_method_from_ip (0x0817f490)
IP 0x817f490 at offset 0x28 of method (wrapper managed-to-native) System.String:GetHashCode () (0x817f468 0x817f4a4)
$1 = void
(gdb) p mono_print_method_from_ip (0x0817f42a)
IP 0x817f42a at offset 0x52 of method System.Collections.Hashtable:GetHash (object) (0x817f3d8 0x817f43b)
$2 = void
Mono support libraries use a couple of signals internally that confuse gdb, you might want to add this to your .gdbinit file:
	handle SIGPWR nostop noprint 
	handle SIGXCPU nostop noprint 
* Mono Debugger The Mono debugger is written in C# and can debug both managed and unmanaged applications, support for multiple-threaded applications and should be relatively easy to port to new platforms. Details of the release are available in post. The debugger contains both Gtk# and command line interfaces. The debugging file format used in Dwarf (it's already supported by our class libraries and the Mono C# compiler; To debug C applications, you need a recent GCC, or to pass the -gdwarf-2 flag to gcc). You can download the releases from Martin Baulig's home page.