Allows Debug.Fail to go through Trace Listeners (dotnet/coreclr#20764)
authorMaryam Ariyan <maryam.ariyan@microsoft.com>
Fri, 2 Nov 2018 20:42:11 +0000 (13:42 -0700)
committerGitHub <noreply@github.com>
Fri, 2 Nov 2018 20:42:11 +0000 (13:42 -0700)
Commit migrated from https://github.com/dotnet/coreclr/commit/86ab37c1526204add7a83fd991b11b90af714bd7

src/coreclr/src/System.Private.CoreLib/src/System/Diagnostics/DebugProvider.Windows.cs
src/libraries/System.Private.CoreLib/src/System/Diagnostics/Debug.cs
src/libraries/System.Private.CoreLib/src/System/Diagnostics/DebugProvider.Unix.cs
src/libraries/System.Private.CoreLib/src/System/Diagnostics/DebugProvider.cs

index 88f6116..1eb445d 100644 (file)
@@ -6,8 +6,14 @@ namespace System.Diagnostics
 {
     public partial class DebugProvider
     {
-        public virtual void ShowDialog(string stackTrace, string message, string detailMessage, string errorSource)
+        public static void FailCore(string stackTrace, string message, string detailMessage, string errorSource)
         {
+            if (s_FailCore != null)
+            {
+                s_FailCore(stackTrace, message, detailMessage, errorSource); 
+                return;
+            }
+
             if (Debugger.IsAttached)
             {
                 Debugger.Break();
index cd22c81..6eef1c8 100644 (file)
@@ -101,17 +101,7 @@ namespace System.Diagnostics
         {
             if (!condition)
             {
-                string stackTrace;
-                try
-                {
-                    stackTrace = new StackTrace(0, true).ToString(System.Diagnostics.StackTrace.TraceFormat.Normal);
-                }
-                catch
-                {
-                    stackTrace = "";
-                }
-                WriteAssert(stackTrace, message, detailMessage);
-                s_provider.ShowDialog(stackTrace, message, detailMessage, "Assertion Failed");
+                Fail(message, detailMessage);
             }
         }
 
@@ -128,31 +118,21 @@ namespace System.Diagnostics
                 {
                     stackTrace = "";
                 }
-                WriteAssert(stackTrace, message, detailMessage);
-                s_provider.ShowDialog(stackTrace, message, detailMessage, SR.GetResourceString(failureKindMessage));
+                s_provider.WriteAssert(stackTrace, message, detailMessage);
+                DebugProvider.FailCore(stackTrace, message, detailMessage, SR.GetResourceString(failureKindMessage));
             }
         }
 
         [System.Diagnostics.Conditional("DEBUG")]
         public static void Fail(string message)
         {
-            Assert(false, message, string.Empty);
+            Fail(message, string.Empty);
         }
 
         [System.Diagnostics.Conditional("DEBUG")]
         public static void Fail(string message, string detailMessage)
         {
-            Assert(false, message, detailMessage);
-        }
-
-        private static void WriteAssert(string stackTrace, string message, string detailMessage)
-        {
-            WriteLine(SR.DebugAssertBanner + Environment.NewLine
-                   + SR.DebugAssertShortMessage + Environment.NewLine
-                   + message + Environment.NewLine
-                   + SR.DebugAssertLongMessage + Environment.NewLine
-                   + detailMessage + Environment.NewLine
-                   + stackTrace);
+            s_provider.Fail(message, detailMessage);
         }
 
         [System.Diagnostics.Conditional("DEBUG")]
index 481f309..e151717 100644 (file)
@@ -10,8 +10,14 @@ namespace System.Diagnostics
     {
         private static readonly bool s_shouldWriteToStdErr = Environment.GetEnvironmentVariable("COMPlus_DebugWriteToStdErr") == "1";
 
-        public virtual void ShowDialog(string stackTrace, string message, string detailMessage, string errorSource)
+        public static void FailCore(string stackTrace, string message, string detailMessage, string errorSource)
         {
+            if (s_FailCore != null)
+            {
+                s_FailCore(stackTrace, message, detailMessage, errorSource); 
+                return;
+            }
+
             if (Debugger.IsAttached)
             {
                 Debugger.Break();
index 3150e68..686fc18 100644 (file)
@@ -8,10 +8,35 @@
 namespace System.Diagnostics
 {
     /// <summary>
-    /// Provides default implementation for Write and ShowDialog methods in Debug class.
+    /// Provides default implementation for Write and Fail methods in Debug class.
     /// </summary>
     public partial class DebugProvider
     {
+        public virtual void Fail(string message, string detailMessage)
+        {
+            string stackTrace;
+            try
+            {
+                stackTrace = new StackTrace(0, true).ToString(System.Diagnostics.StackTrace.TraceFormat.Normal);
+            }
+            catch
+            {
+                stackTrace = "";
+            }
+            WriteAssert(stackTrace, message, detailMessage);
+            FailCore(stackTrace, message, detailMessage, "Assertion Failed");
+        }
+
+        internal void WriteAssert(string stackTrace, string message, string detailMessage)
+        {
+            WriteLine(SR.DebugAssertBanner + Environment.NewLine
+                   + SR.DebugAssertShortMessage + Environment.NewLine
+                   + message + Environment.NewLine
+                   + SR.DebugAssertLongMessage + Environment.NewLine
+                   + detailMessage + Environment.NewLine
+                   + stackTrace);
+        }
+
         public virtual void Write(string message)
         {
             lock (s_lock)
@@ -78,6 +103,7 @@ namespace System.Diagnostics
         }
 
         // internal and not readonly so that the tests can swap this out.
+        internal static Action<string, string, string, string> s_FailCore = null;
         internal static Action<string> s_WriteCore = null;
     }
-}
\ No newline at end of file
+}