Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / SMDiagnostics / System / ServiceModel / Diagnostics / AssertUtility.cs / 1305376 / AssertUtility.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- // This class needs to function even if it was built retail. That is, a debug caller calling against a retail // SMDiagnostics should still have asserts fire. To achieve that, we need to define DEBUG here. // We do not do the registry override in retail SMDiagnostics because that would require shipping a test hook. We // do not generally ship test hooks today. #if DEBUG #define DEBUG_FOR_REALS #else #define DEBUG #endif namespace System.ServiceModel.Diagnostics { using System; using System.Runtime; using System.Runtime.Interop; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Diagnostics.CodeAnalysis; using Microsoft.Win32; static class AssertUtility { #if DEBUG_FOR_REALS const string WinFXRegistryKey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP"; const string WcfRegistryKey = AssertUtility.WinFXRegistryKey + @"\CDF\v4.0\Debug"; const string AssertsFailFastName = "AssertsFailFast"; #endif [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.DebugAssert instead")] [SuppressMessage(FxCop.Category.ReliabilityBasic, FxCop.Rule.InvariantAssertRule, Justification = "Assert implementation")] internal static void DebugAssertCore(string message) { try { #if DEBUG_FOR_REALS string debugMessage = "WCF Assert fired! --> " + message + "\r\n"; if (Debugger.IsAttached) { Debugger.Log(0, Debugger.DefaultCategory, debugMessage); Debugger.Break(); } if (UnsafeNativeMethods.IsDebuggerPresent()) { UnsafeNativeMethods.OutputDebugString(debugMessage); UnsafeNativeMethods.DebugBreak(); } // This can be switched to just FailFast (e.g. for the stress lab). RegistryKey key = Registry.LocalMachine.OpenSubKey(AssertUtility.WcfRegistryKey); if (key != null) { object value; using (key) { value = key.GetValue(AssertUtility.AssertsFailFastName); } if (value != null && typeof(int).IsAssignableFrom(value.GetType()) && ((int) value) != 0) { try { if (ExceptionUtility.mainInstance != null) { #pragma warning disable 618 ExceptionUtility.mainInstance.TraceFailFast(message); } else { ExceptionUtility.TraceFailFast(message, new EventLogger("System.ServiceModel", null)); } #pragma warning restore 618 } finally { Environment.FailFast(message); } } } } catch (Exception exception) { message = string.Concat("Exception during assert! [", exception.GetType().Name, ": ", exception.Message, "] --> ", message); throw; #endif } finally { Debug.Assert(false, message); } } // For use within SMDiagnostics. [Conditional("DEBUG")] [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.DebugAssert instead")] internal static void DebugAssert(bool condition, string message) { if (!condition) { DebugAssert(message); } } [MethodImpl(MethodImplOptions.NoInlining)] [Conditional("DEBUG")] [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.DebugAssert instead")] internal static void DebugAssert(string message) { DebugAssertCore(message); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- // This class needs to function even if it was built retail. That is, a debug caller calling against a retail // SMDiagnostics should still have asserts fire. To achieve that, we need to define DEBUG here. // We do not do the registry override in retail SMDiagnostics because that would require shipping a test hook. We // do not generally ship test hooks today. #if DEBUG #define DEBUG_FOR_REALS #else #define DEBUG #endif namespace System.ServiceModel.Diagnostics { using System; using System.Runtime; using System.Runtime.Interop; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Diagnostics.CodeAnalysis; using Microsoft.Win32; static class AssertUtility { #if DEBUG_FOR_REALS const string WinFXRegistryKey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP"; const string WcfRegistryKey = AssertUtility.WinFXRegistryKey + @"\CDF\v4.0\Debug"; const string AssertsFailFastName = "AssertsFailFast"; #endif [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.DebugAssert instead")] [SuppressMessage(FxCop.Category.ReliabilityBasic, FxCop.Rule.InvariantAssertRule, Justification = "Assert implementation")] internal static void DebugAssertCore(string message) { try { #if DEBUG_FOR_REALS string debugMessage = "WCF Assert fired! --> " + message + "\r\n"; if (Debugger.IsAttached) { Debugger.Log(0, Debugger.DefaultCategory, debugMessage); Debugger.Break(); } if (UnsafeNativeMethods.IsDebuggerPresent()) { UnsafeNativeMethods.OutputDebugString(debugMessage); UnsafeNativeMethods.DebugBreak(); } // This can be switched to just FailFast (e.g. for the stress lab). RegistryKey key = Registry.LocalMachine.OpenSubKey(AssertUtility.WcfRegistryKey); if (key != null) { object value; using (key) { value = key.GetValue(AssertUtility.AssertsFailFastName); } if (value != null && typeof(int).IsAssignableFrom(value.GetType()) && ((int) value) != 0) { try { if (ExceptionUtility.mainInstance != null) { #pragma warning disable 618 ExceptionUtility.mainInstance.TraceFailFast(message); } else { ExceptionUtility.TraceFailFast(message, new EventLogger("System.ServiceModel", null)); } #pragma warning restore 618 } finally { Environment.FailFast(message); } } } } catch (Exception exception) { message = string.Concat("Exception during assert! [", exception.GetType().Name, ": ", exception.Message, "] --> ", message); throw; #endif } finally { Debug.Assert(false, message); } } // For use within SMDiagnostics. [Conditional("DEBUG")] [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.DebugAssert instead")] internal static void DebugAssert(bool condition, string message) { if (!condition) { DebugAssert(message); } } [MethodImpl(MethodImplOptions.NoInlining)] [Conditional("DEBUG")] [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.DebugAssert instead")] internal static void DebugAssert(string message) { DebugAssertCore(message); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ImportCatalogPart.cs
- SchemaNotation.cs
- M3DUtil.cs
- MemberHolder.cs
- StandardOleMarshalObject.cs
- DeadCharTextComposition.cs
- DataGridViewCheckBoxCell.cs
- TextBox.cs
- TemplateGroupCollection.cs
- DataObjectEventArgs.cs
- SQLByte.cs
- DictionaryContent.cs
- StrongNamePublicKeyBlob.cs
- TableColumnCollectionInternal.cs
- WindowsFormsEditorServiceHelper.cs
- MethodBody.cs
- MenuItemBinding.cs
- GenericWebPart.cs
- PasswordRecovery.cs
- DriveNotFoundException.cs
- COM2Enum.cs
- RequestQueue.cs
- TypeConverterHelper.cs
- Ray3DHitTestResult.cs
- Gdiplus.cs
- DynamicDataExtensions.cs
- GroupStyle.cs
- TextProperties.cs
- XmlSchemaImporter.cs
- MissingFieldException.cs
- ConfigXmlSignificantWhitespace.cs
- CategoryAttribute.cs
- EntityCommand.cs
- ExecutionPropertyManager.cs
- TargetConverter.cs
- DesignerInterfaces.cs
- SqlConnectionHelper.cs
- WebContext.cs
- FaultConverter.cs
- MenuAdapter.cs
- MergeFailedEvent.cs
- CheckBoxPopupAdapter.cs
- HTTPNotFoundHandler.cs
- XmlSortKey.cs
- ToolStripPanelRow.cs
- UpdateProgress.cs
- MasterPageParser.cs
- XmlNodeReader.cs
- prompt.cs
- BoundColumn.cs
- AsyncPostBackTrigger.cs
- loginstatus.cs
- XmlSchemaFacet.cs
- FontStretchConverter.cs
- BooleanFacetDescriptionElement.cs
- QueryModel.cs
- PixelShader.cs
- PixelFormatConverter.cs
- AlphabeticalEnumConverter.cs
- ConstraintCollection.cs
- ToolStripArrowRenderEventArgs.cs
- SafeReversePInvokeHandle.cs
- TextTreeTextBlock.cs
- RetrieveVirtualItemEventArgs.cs
- ActivityExecutor.cs
- ResourceDictionary.cs
- TimelineCollection.cs
- TextDecorationLocationValidation.cs
- ReleaseInstanceMode.cs
- GridViewAutomationPeer.cs
- XmlTextEncoder.cs
- SuppressIldasmAttribute.cs
- PageBuildProvider.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- DropSourceBehavior.cs
- WebServiceHostFactory.cs
- ExeConfigurationFileMap.cs
- ProfilePropertyMetadata.cs
- RuleSetReference.cs
- NativeMethods.cs
- AssemblyName.cs
- XMLSyntaxException.cs
- ListMarkerLine.cs
- DateTimeConverter.cs
- Touch.cs
- AuthenticatedStream.cs
- StorageMappingItemLoader.cs
- XmlComment.cs
- StreamWriter.cs
- XmlSerializerSection.cs
- CqlParserHelpers.cs
- DataGridViewRowPostPaintEventArgs.cs
- NonParentingControl.cs
- DetailsViewPagerRow.cs
- VerificationException.cs
- HtmlElementEventArgs.cs
- MenuItemStyleCollectionEditor.cs
- XmlQueryType.cs
- EventArgs.cs
- SocketInformation.cs