This repository contains supporting materials for Sela's diagnostics courses. The instructor will direct you to specific labs as the course progresses. Before you start working on the labs, make sure to review the prerequisites document. It contains information on required software installations as well as some configuration steps you should perform on your system.
These materials are distributed under the GPL 2.0 license (see LICENSE).
You can use the Download ZIP button on the GitHub web interface to download a single .zip file with every file in this repository. Alternatively, you can clone the repository by using the GitHub for Windows desktop application, or by running the following command in a command prompt where you have access to the git.exe
command-line tool:
git clone https://github.com/selagroup/diagnostics-courses.git
Note: For each lab below, [C++] indicates it's a lab that would mostly interest C++ developers; [C#] indicates that it's a lab that would mostly interest C# developers; and [kernel] indicates that it's a lab that would mostly interest driver developers. Labs not marked with either tag can be interesting for both audiences. In any case, if you are building a managed application that has some unmanaged components, you should consider working through all the labs.
- Analyzing I/O Activity with WPR and WPA
- Analyzing Unmanaged Heap Allocations with XPerf and WPA [C++]
- Diagnosing High CPU Utilization with PerfView
- Profiling CPU Work by Sampling with XPerf
- Profiling CPU Work by Sampling with VSPerfCmd
- Analyzing Startup Performance with PerfView
- Reducing .NET Allocations with PerfView [C#]
- Setting Up Continuous ETW Monitoring with PerfView
- Diagnosing a .NET Memory Leak with PerfView [C#]
- Inspecting GC Segments and Fragmentation with VMMap [C#]
- Collecting IntelliTrace Logs with the Stand-Alone Collector [C#]
- Generating Dump Files Automatically with WER
- Basic Dump Analysis with Visual Studio
- Dump File Memory Usage Analysis with Visual Studio [C#]
- Capturing Dump Files with DebugDiag
- Basic Managed Dump Triage with WinDbg [C#]
- Basic Unmanaged Dump Triage with Windbg [C++]
- Exploring WinDbg Commands [C++]
- Exploring SOS Commands [C#]
- .NET Memory Leak Analysis with WinDbg and SOS [C#]
- Advanced Memory Leak Analysis with SOS [C#]
- Analyzing a .NET Memory Leak with DebugDiag [C#]
- Locks and Wait Analysis with WinDbg and SOS [C#]
- Locks and Waits Analysis with WinDbg [C++]
- Catching an Unmanaged Heap Corruption [C++]
- Catching a VTable Corruption [C++]
- Analyzing Stack Corruptions [C++]
- Analyzing an Unmanaged Memory Leak with WinDbg and VMMap [C++]
- Diagnosing Handle Corruptions and Leaks
- Automatic Dump Analysis with CLRMD
- Implementing a Stack Dumper Utility with CLRMD [C#]
- Running Heap Queries on Live Processes with CLRMD [C#]
- Analyzing UI Delays with the Visual Studio Concurrency Visualizer
- Command-Line Performance Analysis with
etrace
- Programmatic ETW Recording with TraceEvent [C#]
- Micro-Benchmarking with BenchmarkDotNet [C#]
- Viewing Top-Level GC Behavior with Performance Counters [C#]
- Profiling CPU Work by Sampling with dotTrace [C#]
- Analyzing Memory Traffic with dotMemory [C#]
- Analyzing a .NET Memory Leak with dotMemory [C#]
- Analyzing a .NET Memory Leak with SciTech Memory Profiler [C#]
- Structure Deserialization with Unsafe Code [C#]
- Measuring Cache Misses with PerfView
Copyright (C) Sela Group, 2007-2017. All rights reserved.