Click here to Skip to main content
13,260,383 members (44,392 online)
Click here to Skip to main content
Add your own
alternative version

Stats

6.9K views
15 bookmarked
Posted 5 Apr 2017

System.Diagnostics Useful Actions

Rate this:
Please Sign up or sign in to vote.
Useful Actions for debugger in System.Diagnostics

Introduction

The namespace System.Diagnostics provides a set of attributes and classes to interact with the system process, events managers, performance counts, etc. This namespace can help us too in debugging job.

Let’s review the useful actions inside of System.Diagnostics namespace.

DebbugerDisplay Attribute

DebuggerDisplay attribute drives the string format with debug screen to show the value of: class, properties or fields.

For this same task, is best known override ToString method, but using DebbugerDisplay attribute is a better choice, because this not only modifies the data structure, only interacts with Visual Studio debbuger screen. Override ToString method for only this purpose can create problems because many actions in .NET take this value for default, for example bindings in WPF.

This attribute supports delegates, properties, fields and assemblies.

Example:

[System.Diagnostics.DebuggerDisplay("{ID} - {Model}- {Manufacturer} - {ProductionDate}")]
public class Car
{
    public int      ID             { get; set; }
    public string   Model          { get; set; }
    public string   Manufacturer   { get; set; }
    public DateTime ProductionDate { get; set; }
}

DebuggerHidden Attribute

DebuggerHidden attribute prevents the compiler stop in constructors, methods, properties and indexers declarations.

In mentioning this latter area, my comment might sound lightweight, but in practice, this can save time push key F11 in debugging.

Example:

[System.Diagnostics.DebuggerHidden]
public static List<Car> GetData()
{
    var result = new List<Car>()
    {
        new Car{ ID = 1, Manufacturer = "Ford",   
        Model = "Mustang", ProductionDate = DateTime.Today },
        new Car{ ID = 2, Manufacturer = "Nissan", 
        Model = "Micra"  , ProductionDate = DateTime.Today }
    };

    return result;
}

Debugger.Launch

Occasionally, we can’t debug the code of a library, service, etc., because it isn’t accessible or we can’t add project to our solution. In this case, we can use the Debugger.Launch() method and Visual Studio opens a debug window and we can debugger its code.

When executed, the line Systen.Diagnostics.Debbuger.Launch() open a MessageBox with the instance of Visual Studio Debugger Options:

In this window, we can choose if we open a new instance of Visual Studio (all versions) or if we re-use an existing instance.

And we can debug the code:

Conditional Attribute

Conditional attribute allows to indicate a condition to methods so that the compiler executes or does not execute its content.

We can use with the precompiler sentences as DEBUG.

static void Main(string[] args)
{
    DebugMethod();
    Console.Read();
}

[System.Diagnostics.Conditional("DEBUG")]
public static void DebugMethod()
{
    Console.WriteLine("Execute Debug Method");
}

Will only run if the Solutions Configurations is Debug.

It doesn’t exist a condition for RELEASE, therefore we will use a define directives.

Define directives is another way to use System.Diagnostics.Conditional:

using System;
namespace SystemDiagnosticsUsefulActions
{
    class Program
    {
        static void Main(string[] args)
        {
            ReleaseMethod();

            Console.Read();
        }

        [System.Diagnostics.Conditional("RELEASE_MODE")]
        public static void ReleaseMethod()
        {
            Console.WriteLine("Execute Release Method");
        }
    }
}

Conclusion

These are the useful tips and traps of System.Diagnostics. They are become very practical in many cases and I hope you find it helpful.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Juan Francisco Morales Larios
Software Developer (Senior) Cecabank
Spain Spain
MAP Microsoft Active Professional 2014

MCPD - Designing and Developing Windows Applications .NET Framework 4
MCTS - Windows Applications Development .NET Framework 4
MCTS - Accessing Data Development .NET Framework 4
MCTS - WCF Development .NET Framework 4

You may also be interested in...

Pro
Pro

Comments and Discussions

 
PraiseUseful Pin
Angelo L17-Apr-17 9:33
memberAngelo L17-Apr-17 9:33 
GeneralMy vote of 5 Pin
Gaston Verelst11-Apr-17 2:21
memberGaston Verelst11-Apr-17 2:21 
GeneralRe: My vote of 5 Pin
Juan Francisco Morales Larios11-Apr-17 5:16
memberJuan Francisco Morales Larios11-Apr-17 5:16 
QuestionThanks for the reminder Pin
Murray Hertz7-Apr-17 8:18
memberMurray Hertz7-Apr-17 8:18 
AnswerRe: Thanks for the reminder Pin
Juan Francisco Morales Larios7-Apr-17 21:57
memberJuan Francisco Morales Larios7-Apr-17 21:57 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.171114.1 | Last Updated 6 Apr 2017
Article Copyright 2017 by Juan Francisco Morales Larios
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid