Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Hidden Secrets" of the Visual Studio .NET debugger? [closed]

One of my favorite features is the "When Hit..." option available on a breakpoint. You can print a message with the value of a variable along with lots of other information, such as:

  • $ADDRESS - Current Instruction
  • $CALLER - Previous Function Name
  • $CALLSTACK - Call Stack
  • $FUNCTION - Current Function Name
  • $PID - Process ID
  • $PNAME - Process Name
  • $TID - Thread ID
  • $TNAME - Thread Name

You can also have it run a macro, but I've never used that feature.


You can right-click an object in the Watch window and click Make Object ID.

It will assign that instance an ID number, allowing you to see, in a complicated object graph, which objects refer to the same instance.


For .net applications System.Diagnostics has lots of useful debugging things. The Debugger class for example:

Debugger.Break(); // Programmatically set a break point
Debugger.Launch(); // Launch the debugger if not already attached
Debugger.IsAttached // Check if the debugger is attached

System.Diagnostics also has lots of good attributes. The two I've used are the debugger display attribute for changing the details put into the locals window and the step through attribute for skipping code you don't care about debugging:

// Displays the value of Property1 for any "MyClass" instance in the debugger
[DebuggerDisplay("{Property1}")]
public class MyClass {
    public string Property1 { get; set; }

    [DebuggerStepThrough]
    public void DontStepInto() {
       // An action we don't want to debug
    }
}

As a web developer who works with Web Services that are within the same solution as my front-end code most of the time, I found the ability to "attach" to a process to be a HUGE time saver.

Before I found this hidden gem, I would always have to set a breakpoint on some front-end code that called a web service method and step into it. Now that I know about this trick/feature I can easily set breakpoints on any part of my code that I want to which saves me loads of time and effort.