Tools for Your Debugging Toolbox

This article was just updated to include an internal Microsoft tool that is now public. There are many free tools used to troubleshoot and debug software. Below I present a list of the tools that my peers and I use most of the time. Though most of the tools below are free Microsoft tools, not…


[PowerShell Script] PowerDbg v6.0 – Using PowerShell to Control WinDbg

Last October the latest version of the PowerDbg tool was released, version 6.0. This release has major changes. For example, it is now easier to write scripts or otherwise just hack around the debugger, and includes the PowerDbgConsole, a bootstrapper designed to make setting up an interactive PowerDbg debugging session a one-liner. In addition, this…


[PowerShell Script] Troubleshooting for Port Exhaustion Using NetStat

Problem Description: Applications that use a great deal of TCP network activity may use all of the possible port numbers — especially if they are very “chatty”.  By default, when an application closes a TCP connection, the port number used cannot be reused for the same IP address for another four minutes (TcpTimedWaitDelay).  Also, by…


[PowerShell Script] PowerDbg v5.3—Using PowerShell to Control WinDbg

This version has a fix in Parse-PowerDbgDSO. Thanks to Igor Dvorkin that found the bug and suggested the fix.     DOWNLOAD POWERDBG   Download PowerDbg   POWERDBG FILES   WinDbg.PSM1  ß Starting with this version this is the only file.   INSTALLATION   WinDbg.PSM1   Goes to %\WindowsPowerShell\Modules\WinDbg   Note: PowerDbg assumes the folder…


[PowerShell Script] Statistics from .NET Applications

This script is more a template to show you how to use PowerDbg. I must say the idea is from my teammate Aaron Barth! This script collects information from all threads running managed code and gives the user statistics by threads like:   –      CLR stack. –      Managed objects from the stack. –      ASP.NET page….


[PowerShell Script] PowerDbg v5.2—Using PowerShell to Control WinDbg

This version has two improvements and some scripts were changed to be compatible with this new version:   –      Starting on version 5.2 the log used to save the command output, enabling the communication between PowerShell and WinDbg is not used anymore. Now all communication uses memory so it’s faster than before.   Note: the…


[PowerShell Script] PowerDbg v5.1—Using PowerShell to Control WinDbg

  So, here we go again. This is a minor version with a few new cmdlets. These new cmdlets are those that we use most of the time.   DOWNLOAD POWERDBG   Download PowerDbg   POWERDBG FILES   WinDbg.PSM1  ß Contains cmdlets used to communicate with WinDbg.   Microsoft.PowerShell_Profile.PS1 ß Contains cmdlets that parse command…


[PowerShell Script] PowerDbg v5.0—Using PowerShell to Control WinDbg

I’m very excited to present the new PowerDbg v5.0! There’s just one change, but it’s a HUGE change that makes PowerDbg extremely fast and easier to use.   Let me explain: Send-PowerDbgCommand is the heart of PowerDbg. This is the cmdlet that sends information to WinDbg and retrieves information from WinDbg. However, this cmdlet is…


[PowerShell Script] Finding Out the Managed Objects that "Leaked"

Here in PFE most of my teammates use the same approach to identify managed objects that “leak”. The idea is to run !DumpHeap –stat once, wait several minutes to allow the “leak” to make itself evident, then run the command a second time. After that you have to select those objects that appear in both…


[PowerShell Script] Extracting All Key/Value Pairs from a Dictionary Object

Brad Linscott, a teammate of mine since the old times of SIE, came up with a very helpful idea: find an automated way to get the key/value pairs from a Dictionary object.   Moreover, Brad has a recipe that teaches how to get the key/value pair from a Dictionary using a manual approach, either using…