On Microsoft’s .NET implementation on Windows a Debug.Fail() (which is equal to a Debug.Assert(false)) when run on a debug build displays a dialog box with the options Abort, Retry, Ignore. When run in the debugger it also displays the call stack.
On Mono however no dialog box shows; it behaves the same as when the user pressed ‘Ignore’. What’s worse is that it doesn’t display the call stack by default, even when run in debugger. This doesn’t give any hint if an exception happened.
But: some research showed that there is an environment variable MONO_TRACE_LISTENER that can be set that outputs the call stack to wherever:
In MonoDevelop you can set the environment variable in Project/Options/Run/General.
Some background information can be found in the Mono bug #317040.
And even better: if you create a .config file for your app and set the assertuienabled attribute to true, you get the same dialog as with .NET (discussion in bug #430477):
File app.config: <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.diagnostics> <assert assertuienabled="true" /> </system.diagnostics> </configuration>
But there are still some differences to .NET: if the message box displays we don’t get a call stack in the output. I guess it might be possible to add another TraceListener (e.g. ConsoleTraceListener) that takes care of that.