(blog | rss | twitter | linkedin)
This is a list of really awesome tools, apps and utilities that were used very heavily by me in a past life. I still whip these out whenever needed, but I really don’t use them on a daily basis anymore.
Pretty much all of these are “Windows OS centric” or “.Net framework centric”.
Thought I should take a small trip down the memory lane and capture these tools here in a blog post. Hopefully someone will find this list useful.
Debugging tools for Windows: This includes a family of Windows debuggers and related diagnostic utilities. An “absolute must have” for developers who primarily work on the Windows platform.
KD: We’d run pre-release OSes with KD (kernel debugger) enabled over null-modem cables (and later usb, tcp/ip). This was our primary mechanism for catching and investigating BSODs. Also NTSD piped to KD was the only mechanism for investigating issues with NT system services (that ran before user logon).
GFlags: An oddball utility that could toggle various user-mode Windows diagnostic features. Mainly used for detecting attempts to access heap-memory addresses beyond allocation boundary (heap verification done using fill patterns).
Diagnostic tools for .Net framework: Quite a few of the tools on this list were authored by my awesome co-workers on Microsoft’s Common Language Runtime team (they started out as internal-only tools, but grew in usefulness over time and were then publicly shipped).
SOS.dll: WinDbg extension to debug managed code. Particularly useful for peeking into CLR structures & diagnosing GC issues.
PSSCOR: WinDbg extension useful for debugging asp.net issues.
ILDASM: Inspect metadata of a .Net executable.
ILSPY and .Net Reflector: Similar to ILDASM above but also allows you to decompile IL to C# or VB.net.
PInvoke.net: Easily generate pinvoke signatures for calling native Win32 API or COM components from .Net code.
CLR Profiler: A memory profiler which displayed the allocation profile & call tree using sankey diagrams.
PerfView: An ETW based utility for diagnosing performance issues in .Net code.
MDbg: A simple, yet powerful command-line debugger for .Net code.
CLRMD: APIs for analyzing the .Net heap and other runtime structures from running managed processes and dumps. Hat tip to @leculver.
CCI: a.k.a Common Compiler Infrastructure. APIs that allow manipulation of .Net executables (metadata, IL) and related PDB symbols.
Sysinternals suite: An awesome, awesome suite of diagnostic & administration tools for Windows. Looks like there is now an effort underway to port these tools to linux.
Process Explorer: ‘Task manager on steroids’ would be an overly simplistic way to describe it. It does much, much more. You can view a process’s handles, loaded DLLs and various perf stats.
Process Monitor: A flight data recorder of sorts that tracks an application’s file, registry, network, process & thread activities.
DebugView: A tool to monitor system-wide or application-specific debug output. Specifically user-mode debug outputs from Kernel32!OutputDebugString() or System.Diagnostics.Debug.Write(). Kernel mode debug outputs are also shown.
AutoLogon: Automatically logs a users in to Windows. This utility piggybacks on the autologon keys baked in the Windows registry.
PSExec: Enables admins to execute commands and apps on remote Windows machines. A quick-n-dirty version of ssh/telnet, minus the setup pain.
Disk2Vhd: Useful tool that allows you to snapshot a disk as a VHD.
Other miscellaneous Windows diagnostic utilities
Spy++: Visualize WndProc messages and window handles. Extremely useful for Win32 GUI programmers.
App Verifier: A runtime verification tool that monitors an application’s interaction with the OS, profiling its use of kernel objects, registry, file system and Win32 apis (heap, handles, locks, and more) and flagging any violations.
DebugDiag v2: Another utility based on the dbgeng.dll engine. Useful for snapping dumps from IIS apps and analyzing them.
Orca: Inspect and modify MSI installer packages.
OleView: A convenience utility for inspecting registration details of COM components.
Depends: a.k.a. Dependency Walker. A utility that scanned an executable’s import & export address tables to figure out its module dependencies.
PEDump: Dump the contents of a Windows portable executable file.
IDEs, code editors and related stuff
Atom, Notepad++, SublimeText, SlickEdit: All great code editors in their own right. But once VSCode arrived on the scene, I was hooked on to it and never looked back.
FxCop: Static analyzer for .Net code. Now superseded by roslyn analyzers.
CodeFlow: An awesome code-review tool (microsoft internal-only) that allowed iterative code reviews (including carry-over of unresolved review comments). IMHO, till date, this was the only tool that got the code-review process right. There was some talk about integrating it with TFS/VSTS source control, but that never happened (not sure why).
Windows administration tools
Remote desktop connection: Allows an admin to log into a remote Windows machine. Also known as mstsc (microsoft terminal services client).
Remote desktop connection manager: The “enterprise” version of mstsc, allows an admin to log into a group/pool of remote Windows machines.
Regedit: Duh. Windows’s built-in registry editing tool.
Hyper-V Manager: Allows you to configure & host VMs on your Windows Server machine.
Server Manager: Allows you to enable/disable features + add/remove roles on your Windows Server machine.
Resource Monitor: Lists top resource-consuming app and services (CPU, memory, disk I/O and network I/O).
WMIC: The CLI for WMI (Windows Management Instrumentation). Allows you to interact with various WMI providers.
I’m pretty sure there were a couple more .Net and Windows tools that I’ve forgotten about. Know of any? Would love to hear from you, please leave a comment below or send me a tweet.
That’s it for today folks!