{
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();
{
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);
}
}
{
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")]
{
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();
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)
}
// 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
+}