[Mono-bugs] [Bug 71947][Nor] Changed - Debug.Assert not working out of the box

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Mon, 31 Jan 2005 07:53:04 -0500 (EST)


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by jonpryor@vt.edu.

http://bugzilla.ximian.com/show_bug.cgi?id=71947

--- shadow/71947	2005-01-29 12:38:52.000000000 -0500
+++ shadow/71947.tmp.29141	2005-01-31 07:53:04.000000000 -0500
@@ -1,14 +1,14 @@
 Bug#: 71947
 Product: Mono: Class Libraries
 Version: 1.0
-OS: 
+OS: unknown
 OS Details: 
-Status: NEW   
+Status: RESOLVED   
 Resolution: 
-Severity: 
+Severity: Unknown
 Priority: Normal
 Component: System
 AssignedTo: mono-bugs@ximian.com                            
 ReportedBy: matze@braunis.de               
 QAContact: mono-bugs@ximian.com
 TargetMilestone: ---
@@ -23,6 +23,68 @@
 1. The program isn't aborted after the listeners have been called.
 2. There's no listener registered by default. There should be a listener
 which displays something on stderr.
 
 So in effect your application will just continue silently which isn't
 really what assert should do.
+
+------- Additional Comments From jonpryor@vt.edu  2005-01-31 07:53 -------
+Debug.Assert isn't fully implemented yet, but not for the reasons you
+specify. :-)
+
+To answer your issues:
+
+1.  Isn't necessarily supposed to happen; more below.
+2.  The DefaultTraceListener is registered by default, it's just
+producing no output.  Set the MONO_TRACE environment value to view its
+output on the console, e.g. export MONO_TRACE=Console.Error:+++.
+
+See the DefaultTraceListener documentation for more information:
+http://www.go-mono.com/docs/index.aspx?tlink=9@ecma%3a1182%23DefaultTraceListener%2f
+
+Not killing the program when an assertion fails is mostly in keeping
+with what .NET does.
+
+If you try the following program under .NET:
+
+	// test Debug.Assert behavior
+	using System;
+	using System.Diagnostics;
+
+	class Test {
+		public static void Main ()
+		{
+			Console.WriteLine ("Begin");
+			Debug.Assert (false);
+			Console.WriteLine ("End");
+		}
+	}
+
+Compile with "csc /d:DEBUG da.cs", run as "da.exe", .NET will display
+a dialog box:
+
+	Title: Assertion Failed: Abort=Quit, Retry=Debug, 
+		Ignore=Continue
+	at Test.Main
+	[Abort] [Retry] [Ignore]
+
+[Ignore] is the default button.  If [Ignore] is selected, you see both
+"Begin" and "End" printed to the console.  [Retry] starts a debugger,
+and [Abort] quits the program.
+
+Furthermore, no assertion message is displayed to the console; .NET
+uses OutputDebugString instead, so a utility such as sysinternal's
+DbgView or a debugger must be used to view it.
+
+The current mono default is [Ignore], which is why the program isn't
+terminated.
+
+Consequently, the *real* missing behavior is the display of the dialog
+box asking the user what to do, and will likely remain missing until
+someone gets bored enough to tackle the issue of which toolkit to use
+(should it be a System.Windows.Forms dialog?  Or Gtk#?  Or Qt#?  Or
+wx.NET?  And how to select which one?).
+
+If you really need the program to be terminated when an assertion
+fails, create a new TraceListener and override both TraceListener.Fail
+methods to call Environment.Exit.  You can then use the application
+.config file to add this listener to the Debug.Listeners collection.