Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Diagnostics / Debugger.cs / 1 / Debugger.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // The Debugger class is a part of the System.Diagnostics package // and is used for communicating with a debugger. namespace System.Diagnostics { using System; using System.IO; using System.Collections; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; // No data, does not need to be marked with the serializable attribute [System.Runtime.InteropServices.ComVisible(true)] public sealed class Debugger { // Break causes a breakpoint to be signalled to an attached debugger. If no debugger // is attached, the user is asked if he wants to attach a debugger. If yes, then the // debugger is launched. public static void Break() { if (!IsDebuggerAttached()) { // Try and demand UnmanagedCodePermission. This is done in a try block because if this // fails we want to be able to silently eat the exception and just return so // that the call to Break does not possibly cause an unhandled exception. // The idea here is that partially trusted code shouldn't be able to launch a debugger // without the user going through Watson. try { new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); } // If we enter this block, we do not have permission to break into the debugger // and so we just return. catch (SecurityException) { return; } } // Causing a break is now allowed. BreakInternal(); } static void BreakCanThrow() { if (!IsDebuggerAttached()) { new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); } // Causing a break is now allowed. BreakInternal(); } [MethodImplAttribute(MethodImplOptions.InternalCall)] private static extern void BreakInternal(); // Launch launches & attaches a debugger to the process. If a debugger is already attached, // nothing happens. // public static bool Launch() { if (IsDebuggerAttached()) return (true); // Try and demand UnmanagedCodePermission. This is done in a try block because if this // fails we want to be able to silently eat the exception and just return so // that the call to Break does not possibly cause an unhandled exception. // The idea here is that partially trusted code shouldn't be able to launch a debugger // without the user going through Watson. try { new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); } // If we enter this block, we do not have permission to break into the debugger // and so we just return. catch (SecurityException) { return (false); } // Causing the debugger to launch is now allowed. return (LaunchInternal()); } [MethodImplAttribute(MethodImplOptions.InternalCall)] private static extern bool LaunchInternal(); // Returns whether or not a debugger is attached to the process. // public static bool IsAttached { get { return IsDebuggerAttached(); } } [MethodImplAttribute(MethodImplOptions.InternalCall)] private static extern bool IsDebuggerAttached(); // Constants representing the importance level of messages to be logged. // // An attached debugger can enable or disable which messages will // actually be reported to the user through the COM+ debugger // services API. This info is communicated to the runtime so only // desired events are actually reported to the debugger. // // Constant representing the default category public static readonly String DefaultCategory = null; // Posts a message for the attached debugger. If there is no // debugger attached, has no effect. The debugger may or may not // report the message depending on its settings. [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern void Log(int level, String category, String message); // Checks to see if an attached debugger has logging enabled // [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern bool IsLogging(); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // The Debugger class is a part of the System.Diagnostics package // and is used for communicating with a debugger. namespace System.Diagnostics { using System; using System.IO; using System.Collections; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; // No data, does not need to be marked with the serializable attribute [System.Runtime.InteropServices.ComVisible(true)] public sealed class Debugger { // Break causes a breakpoint to be signalled to an attached debugger. If no debugger // is attached, the user is asked if he wants to attach a debugger. If yes, then the // debugger is launched. public static void Break() { if (!IsDebuggerAttached()) { // Try and demand UnmanagedCodePermission. This is done in a try block because if this // fails we want to be able to silently eat the exception and just return so // that the call to Break does not possibly cause an unhandled exception. // The idea here is that partially trusted code shouldn't be able to launch a debugger // without the user going through Watson. try { new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); } // If we enter this block, we do not have permission to break into the debugger // and so we just return. catch (SecurityException) { return; } } // Causing a break is now allowed. BreakInternal(); } static void BreakCanThrow() { if (!IsDebuggerAttached()) { new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); } // Causing a break is now allowed. BreakInternal(); } [MethodImplAttribute(MethodImplOptions.InternalCall)] private static extern void BreakInternal(); // Launch launches & attaches a debugger to the process. If a debugger is already attached, // nothing happens. // public static bool Launch() { if (IsDebuggerAttached()) return (true); // Try and demand UnmanagedCodePermission. This is done in a try block because if this // fails we want to be able to silently eat the exception and just return so // that the call to Break does not possibly cause an unhandled exception. // The idea here is that partially trusted code shouldn't be able to launch a debugger // without the user going through Watson. try { new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); } // If we enter this block, we do not have permission to break into the debugger // and so we just return. catch (SecurityException) { return (false); } // Causing the debugger to launch is now allowed. return (LaunchInternal()); } [MethodImplAttribute(MethodImplOptions.InternalCall)] private static extern bool LaunchInternal(); // Returns whether or not a debugger is attached to the process. // public static bool IsAttached { get { return IsDebuggerAttached(); } } [MethodImplAttribute(MethodImplOptions.InternalCall)] private static extern bool IsDebuggerAttached(); // Constants representing the importance level of messages to be logged. // // An attached debugger can enable or disable which messages will // actually be reported to the user through the COM+ debugger // services API. This info is communicated to the runtime so only // desired events are actually reported to the debugger. // // Constant representing the default category public static readonly String DefaultCategory = null; // Posts a message for the attached debugger. If there is no // debugger attached, has no effect. The debugger may or may not // report the message depending on its settings. [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern void Log(int level, String category, String message); // Checks to see if an attached debugger has logging enabled // [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern bool IsLogging(); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PresentationSource.cs
- SaveFileDialog.cs
- PrinterUnitConvert.cs
- DateTimePicker.cs
- Rotation3DAnimationBase.cs
- TreeViewHitTestInfo.cs
- AttributeAction.cs
- CookieProtection.cs
- GeneralTransformGroup.cs
- ReflectEventDescriptor.cs
- UnmanagedMemoryStreamWrapper.cs
- StandardCommands.cs
- SspiHelper.cs
- GridViewColumnCollectionChangedEventArgs.cs
- ExitEventArgs.cs
- ExpressionPrefixAttribute.cs
- ThreadExceptionEvent.cs
- SettingsBase.cs
- FunctionQuery.cs
- MobileTextWriter.cs
- LineGeometry.cs
- AggregationMinMaxHelpers.cs
- HybridDictionary.cs
- NamedPipeProcessProtocolHandler.cs
- storepermissionattribute.cs
- IListConverters.cs
- CompilerResults.cs
- SectionInput.cs
- MultiView.cs
- KeyValueConfigurationCollection.cs
- HtmlGenericControl.cs
- CachedTypeface.cs
- DataGridViewAccessibleObject.cs
- HttpWriter.cs
- XPathParser.cs
- CodeNamespaceCollection.cs
- AssemblyName.cs
- AccessDataSource.cs
- AppearanceEditorPart.cs
- DocumentPage.cs
- AssemblyLoader.cs
- ActivityXRefPropertyEditor.cs
- Int64Storage.cs
- HtmlControlDesigner.cs
- Stream.cs
- OledbConnectionStringbuilder.cs
- TextParagraphCache.cs
- InsufficientExecutionStackException.cs
- SignatureToken.cs
- ActivityInterfaces.cs
- AxisAngleRotation3D.cs
- WmlImageAdapter.cs
- DbParameterCollection.cs
- Relationship.cs
- ItemsControlAutomationPeer.cs
- HeaderedContentControl.cs
- WindowsRegion.cs
- ReversePositionQuery.cs
- BinaryMessageFormatter.cs
- SortDescription.cs
- SqlTriggerAttribute.cs
- HttpCapabilitiesSectionHandler.cs
- SmtpNetworkElement.cs
- Sql8ExpressionRewriter.cs
- DBDataPermission.cs
- ChoiceConverter.cs
- ExtensionQuery.cs
- messageonlyhwndwrapper.cs
- TPLETWProvider.cs
- PasswordBoxAutomationPeer.cs
- ServiceHostingEnvironment.cs
- SqlClientFactory.cs
- FastPropertyAccessor.cs
- assemblycache.cs
- CustomAttributeFormatException.cs
- HostingPreferredMapPath.cs
- Parsers.cs
- RemoteWebConfigurationHost.cs
- FastEncoderWindow.cs
- Dictionary.cs
- DeferredElementTreeState.cs
- CharacterMetricsDictionary.cs
- ComPlusDiagnosticTraceSchemas.cs
- ChoiceConverter.cs
- TypefaceMetricsCache.cs
- SqlClientWrapperSmiStreamChars.cs
- GB18030Encoding.cs
- RelationshipConstraintValidator.cs
- WindowsGraphicsCacheManager.cs
- KoreanCalendar.cs
- HttpCookiesSection.cs
- MsmqIntegrationMessageProperty.cs
- BigInt.cs
- XmlValueConverter.cs
- HashMembershipCondition.cs
- SerializerProvider.cs
- DeviceContexts.cs
- TreeNodeConverter.cs
- WindowsHyperlink.cs
- XNodeValidator.cs