5.2 - Tools and Resources
Effective debugging often depends on having the right tools at your disposal. This chapter explores a variety of debugging tools and resources that can enhance your debugging capabilities in C#.
5.2.1 - Debugger Windows
Visual Studio provides several specialized debugging windows that help you monitor and analyze your application during debugging.
5.2.1.1 - Watch Windows
Watch windows allow you to monitor variables during debugging:
-
Locals Window: Shows all variables in the current scope
- Access: Debug > Windows > Locals
- Shortcut: Alt+4
-
Autos Window: Shows variables used in the current and previous statements
- Access: Debug > Windows > Autos
- Shortcut: Ctrl+Alt+V, A
-
Watch Window: Displays variables you specifically want to track
- Access: Debug > Windows > Watch > Watch 1-4
- Shortcut: Ctrl+Alt+W, 1-4
5.2.1.2 - Call Stack Window
The Call Stack window shows the sequence of method calls that led to the current point in the code:
- Access: Debug > Windows > Call Stack
- Shortcut: Ctrl+Alt+C
// If you're in this method
public decimal CalculateDiscount(Customer customer, Order order)
{
// The call stack might show:
// CalculateDiscount
// ProcessOrder
// HandleCustomerRequest
// Main
}
5.2.1.3 - Breakpoints Window
The Breakpoints window lists all breakpoints in your solution and allows you to manage them:
- Access: Debug > Windows > Breakpoints
- Shortcut: Ctrl+Alt+B
5.2.1.4 - Exception Settings
The Exception Settings window allows you to configure which exceptions should cause the debugger to break:
- Access: Debug > Windows > Exception Settings
- Shortcut: Ctrl+Alt+E
5.2.2 - Immediate Window
The Immediate Window allows you to evaluate expressions and execute commands during debugging.
5.2.2.1 - Evaluating Expressions
You can evaluate expressions to check variable values or perform calculations:
// In the Immediate Window
order.Items.Count
customer.Name.ToUpper()
order.Total * 0.9
5.2.2.2 - Executing Commands
You can also execute commands to modify program state:
// In the Immediate Window
order.Total = 100
customer.Name = "John Doe"
5.2.2.3 - Calling Methods
You can call methods to test their behavior:
// In the Immediate Window
CalculateDiscount(customer, order)
5.2.3 - Diagnostic Tools
Visual Studio includes diagnostic tools that help you analyze your application's performance and behavior.
5.2.3.1 - Performance Profiler
The Performance Profiler helps you identify performance bottlenecks:
- Access: Debug > Performance Profiler
- Metrics: CPU Usage, Memory Usage, Application Timeline
5.2.3.2 - IntelliTrace
IntelliTrace (available in Visual Studio Enterprise) records your application's execution history, allowing you to step backward in time:
- Access: Debug > Windows > IntelliTrace Events
- Features: Historical Debugging, Event Recording
5.2.3.3 - Live Visual Tree
The Live Visual Tree (for WPF and UWP applications) allows you to inspect the visual tree of your application during debugging:
- Access: Debug > Windows > Live Visual Tree
- Features: UI Element Inspection, Property Modification
5.2.4 - Memory Usage Analysis
Memory analysis tools help you identify memory leaks and optimize memory usage.
5.2.4.1 - Memory Snapshot
You can take memory snapshots to analyze memory usage:
- Open the Diagnostic Tools window (Debug > Windows > Show Diagnostic Tools)
- Click "Take Snapshot" in the Memory Usage section
- Compare snapshots to identify memory growth
5.2.4.2 - Object Allocation Tracking
Object allocation tracking helps you identify excessive object creation:
- Enable "Allocation Tracking" in the Memory Usage section
- Run your application
- Analyze the allocation data to identify hotspots
5.2.4.3 - Garbage Collection Analysis
You can analyze garbage collection behavior to optimize memory management:
// Force garbage collection for testing
GC.Collect();
GC.WaitForPendingFinalizers();
5.2.5 - Performance Profiling
Performance profiling tools help you identify and resolve performance issues.
5.2.5.1 - CPU Usage Profiling
CPU usage profiling helps you identify methods that consume excessive CPU time:
- Start CPU profiling (Debug > Performance Profiler > CPU Usage)
- Run your application
- Analyze the results to identify hotspots
5.2.5.2 - Memory Profiling
Memory profiling helps you identify memory leaks and excessive memory usage:
- Start memory profiling (Debug > Performance Profiler > Memory Usage)
- Run your application
- Analyze the results to identify memory issues
5.2.5.3 - Database Profiling
For applications that use databases, you can profile database operations:
- Use tools like Entity Framework Profiler or MiniProfiler
- Analyze query execution time and frequency
- Optimize slow queries
In the next chapter, we'll explore specific debugging scenarios and techniques for handling common debugging challenges in C# applications.