| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- // Licensed to the .NET Foundation under one or more agreements.
- // The .NET Foundation licenses this file to you under the MIT license.
- // See the LICENSE file in the project root for more information.
- // Do not remove this, it is needed to retain calls to these conditional methods in release builds
- #define DEBUG
- using System.Diagnostics.CodeAnalysis;
- using System.Threading;
- namespace System.Diagnostics
- {
- /// <summary>
- /// Provides a set of properties and methods for debugging code.
- /// </summary>
- public static partial class Debug
- {
- private static volatile DebugProvider s_provider = new DebugProvider();
- public static DebugProvider SetProvider(DebugProvider provider)
- {
- if (provider == null)
- throw new ArgumentNullException(nameof(provider));
- return Interlocked.Exchange(ref s_provider, provider);
- }
- public static bool AutoFlush
- {
- get => true;
- set { }
- }
- [ThreadStatic]
- private static int t_indentLevel;
- public static int IndentLevel
- {
- get => t_indentLevel;
- set
- {
- t_indentLevel = value < 0 ? 0 : value;
- s_provider.OnIndentLevelChanged(t_indentLevel);
- }
- }
- private static volatile int s_indentSize = 4;
- public static int IndentSize
- {
- get => s_indentSize;
- set
- {
- s_indentSize = value < 0 ? 0 : value;
- s_provider.OnIndentSizeChanged(s_indentSize);
- }
- }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Close() { }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Flush() { }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Indent() =>
- IndentLevel++;
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Unindent() =>
- IndentLevel--;
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Print(string? message) =>
- WriteLine(message);
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Print(string format, params object?[] args) =>
- WriteLine(string.Format(null, format, args));
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Assert([DoesNotReturnIf(false)] bool condition) =>
- Assert(condition, string.Empty, string.Empty);
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Assert([DoesNotReturnIf(false)] bool condition, string? message) =>
- Assert(condition, message, string.Empty);
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Assert([DoesNotReturnIf(false)] bool condition, string? message, string? detailMessage)
- {
- if (!condition)
- {
- Fail(message, detailMessage);
- }
- }
- internal static void ContractFailure(string message, string detailMessage, string failureKindMessage)
- {
- string stackTrace;
- try
- {
- stackTrace = new StackTrace(2, true).ToString(System.Diagnostics.StackTrace.TraceFormat.Normal);
- }
- catch
- {
- stackTrace = "";
- }
- s_provider.WriteAssert(stackTrace, message, detailMessage);
- DebugProvider.FailCore(stackTrace, message, detailMessage, failureKindMessage);
- }
- [System.Diagnostics.Conditional("DEBUG")]
- [DoesNotReturn]
- public static void Fail(string? message) =>
- Fail(message, string.Empty);
- [System.Diagnostics.Conditional("DEBUG")]
- [DoesNotReturn]
- public static void Fail(string? message, string? detailMessage) =>
- s_provider.Fail(message, detailMessage);
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Assert([DoesNotReturnIf(false)] bool condition, string? message, string detailMessageFormat, params object?[] args) =>
- Assert(condition, message, string.Format(detailMessageFormat, args));
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteLine(string? message) =>
- s_provider.WriteLine(message);
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Write(string? message) =>
- s_provider.Write(message);
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteLine(object? value) =>
- WriteLine(value?.ToString());
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteLine(object? value, string? category) =>
- WriteLine(value?.ToString(), category);
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteLine(string format, params object?[] args) =>
- WriteLine(string.Format(null, format, args));
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteLine(string? message, string? category)
- {
- if (category == null)
- {
- WriteLine(message);
- }
- else
- {
- WriteLine(category + ": " + message);
- }
- }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Write(object? value) =>
- Write(value?.ToString());
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Write(string? message, string? category)
- {
- if (category == null)
- {
- Write(message);
- }
- else
- {
- Write(category + ": " + message);
- }
- }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void Write(object? value, string? category) =>
- Write(value?.ToString(), category);
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteIf(bool condition, string? message)
- {
- if (condition)
- {
- Write(message);
- }
- }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteIf(bool condition, object? value)
- {
- if (condition)
- {
- Write(value);
- }
- }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteIf(bool condition, string? message, string? category)
- {
- if (condition)
- {
- Write(message, category);
- }
- }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteIf(bool condition, object? value, string? category)
- {
- if (condition)
- {
- Write(value, category);
- }
- }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteLineIf(bool condition, object? value)
- {
- if (condition)
- {
- WriteLine(value);
- }
- }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteLineIf(bool condition, object? value, string? category)
- {
- if (condition)
- {
- WriteLine(value, category);
- }
- }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteLineIf(bool condition, string? message)
- {
- if (condition)
- {
- WriteLine(message);
- }
- }
- [System.Diagnostics.Conditional("DEBUG")]
- public static void WriteLineIf(bool condition, string? message, string? category)
- {
- if (condition)
- {
- WriteLine(message, category);
- }
- }
- }
- }
|