WinDbg is a multipurpose debugger for the Microsoft Windows computer operating system, distributed by Microsoft. Debugging is the process of finding and resolving errors in a system; in computing it also includes exploring the internal operation of software as a help to development. It can be used to debug user mode applications, device drivers, and the operating system itself in kernel mode.

Overview
Like the better-known Visual Studio Debugger WinDbg has a graphical user interface (GUI), but is more powerful and has little else in common. WinDbg can automatically load debugging symbol files (e.g., PDB files) from a server by matching various criteria (e.g., timestamp, CRC, single or multiprocessor version) via SymSrv (SymSrv.dll), instead of the more time-consuming task of creating a symbol tree for a debugging target environment.  If a private symbol server is configured, the symbols can be correlated with the source code for the binary. This eases the burden of debugging problems that have various versions of binaries installed on the debugging target by eliminating the need for finding and installing specific symbols version on the debug host. Microsoft has a public symbol server that has most of the public symbols for Windows 2000 and later versions of Windows (including service packs).

WinDbg can also be used for debugging kernel-mode memory dumps, created after what is commonly called the Blue Screen of Death which occurs when a bug check is issued.  It can also be used to debug user-mode crash dumps. This is known as post-mortem debugging.

Recent versions of WinDbg have been and are being distributed as part of the free Debugging Tools for Windows suite, which shares a common debugging back-end between WinDbg and command line debugger front-ends like KD, CDB, and NTSD. Most commands can be used as is with all the included debugger front-ends.

In 2017 Microsoft announced new version of WinDbg called WinDbg Preview (aka WinDbgX).  One of the most notable features of WinDbg Preview is so called Time-Travel-Debugging (TTD). The main idea here is that the user can record an actual live process (at a performance penalty) to later debug going back and forth in time. This feature is especially useful during reverse-engineering process. It also allows writing scripts in JavaScript language.

Extensions
WinDbg allows the loading of extension DLLs that can augment the debugger's supported commands and allow for help in debugging specific scenarios:  for example, displaying an MSXML document given an IXMLDOMDocument, or debugging the Common Language Runtime (CLR).  These extensions are a large part of what makes WinDbg such a powerful debugger.  WinDbg is used by the Microsoft Windows product team to build Windows, and everything needed to debug Windows is included in these extension DLLs.

Extension commands are always prefixed with !.

While some extensions are used only inside Microsoft, most of them are part of the public Debugging Tools for Windows package.

The extension model is documented in the help file included with the Debugging Tools for Windows.

Ext.dll
Ext is a standard Windows Debugger extension that ships with WinDBG and is loaded by default.

!analyze command
The most commonly used command is !analyze -v, which analyzes the current state of the program being debugged and the machine/process state at the moment of crash or hang. This command is often able to debug the current problem in a completely automated fashion.

When used without any switches, !analyze simply returns the results of its analysis.  The -v and -vv give further details about that analysis.

Wow6432exts.dll
Wow6432exts is a standard Windows Debugger extension that ships with WinDBG.
It is used to debug processes running inside WoW64 (32-bit processes running in 64-bit Windows).

SOS.dll
The SOS (Son of Strike) Debugging Extension (SOS.dll) assists in debugging managed programs in Visual Studio and WinDbg by providing information about the internal common language runtime (CLR) environment. This tool requires a project to have unmanaged debugging enabled. SOS.dll is automatically installed with the .NET Framework. To use SOS.dll in Visual Studio, install the Windows Driver Kit (WDK). To debug a process or memory dump, the sos.dll version must match the .NET Framework version. Psscor2 and Psscor4 are a superset of SOS.

Psscor2.dll
Psscor2 is the Windows Debugger Extension used to debug .NET Framework applications that use the .NET CLR version 2.0 (.NET Framework versions 2 through 3.5). Psscor2 was developed for internal use at Microsoft as part of their Product Support Services tools. While Microsoft only released Psscor2 in 2010  Microsoft had been publishing commands from the extension several years before, causing difficulty for those who were trying to follow their processes.

Psscor4.dll
Psscor4 is a Windows Debugger extension used to debug .NET Framework 4 applications.

Coupling with virtual machines
WinDbg allows debugging a Microsoft Windows kernel running on a virtual machine by VMware, VPC or Parallels  using a named pipe. This can be achieved by using a virtual COM port. In the case of VMware and VirtualBox, the VirtualKD extension adds native support for VM debugging to the Windows kernel, claiming to speed debugging by a factor of up to 45. For Windows 8 and later, kernel debugging over network is allowed, allowing fast kernel debugging without special configuration.

Protocol
The WinDbg protocol is not documented, but is supported by the IDA Pro and radare2 disassemblers.

See also
 ProcDump
 Microsoft Detours

References

External links
 Getting Started: Install Instructions, Part 1, Part 2
 Debugging Tools for Windows - information and free downloads
 WinDbg. From A to Z!  - Theory and examples, 111 slides
 Common WinDbg Commands (Thematically Grouped)
 Tutorial on solving system crashes using WinDbg 
 Symbols loading in WinDbg
 Windows Debuggers: Part 1: A WinDbg Tutorial
 KD extension for fast VMware and VirtualBox debugging
 SOS Debugging Extension (SOS.dll)
 psscor4 (.NET 4.0) or psscor2 (.NET 2.0-3.5) Replacement for SOS with a superset of commands
  WinDBG v6.12.2.633 available via Windows Driver Kit Version 7.1.0
 Extension for python scripting (pykd)
 DbgKit: the first GUI extension for Debugging Tools for Windows

Debuggers
Microsoft software
WinDbg는 마이크로소프트 윈도우의 다용도 디버거이다. 디버깅은 시스템의 오류들을 찾고 분석하는 과정으로서, 또한 개발을 돕는 용도로서 소프트웨어의 내부 동작을 탐색하는 것도 포함한다. 이것은 유저 모드 애플리케이션, 장치 드라이버, 그리고 커널 모드에서 운영체제 자체를 디버깅하는 데 사용될 수 있다. 비주얼 스튜디오 디버거 처럼 그래픽 사용자 인터페이스 (GUI)를 가지지만 더 강력하다.

WinDbg는 버그 체크 시 발생하는 블루 스크린 이후 생성되는 커널 모드 메모리 덤프를 디버깅할 때 사용될 수 있다. 또한 유저 모드 충돌 덤프를 디버깅하는데도 사용될 수 있는데, 이것은 사후 분석 디버깅이라고 알려져 있다.

WinDbg는 SymSrv(SymSrv.dll)을 통해서 서버에서 다양한 표준(예를 들면 타임스탬프, CRC, 프로세서 버전)에 상응하는 디버그 심볼 파일(예를 들면 PDB)들을 자동으로 로드할 수 있다(더 많은 시간을 소비하는 심볼 트리 생성 대신). 전용 심볼 서버가 설정되면 심볼들은 소스코드와 연관된다. 디버그 호스트의 특정한 심볼 버전을 찾고 설치할 필요를 없애줌으로써 디버깅 대상에 설치된 다양한 버전들의 바이너리들에 의한 디버깅 문제들에 대한 부담을 경감시켜준다. 마이크로소프트는 윈도우 2000과 이후 버전의 대부분의 공개 심볼들을 가지며, 서비스 팩들을 포함하는 공용 심볼 서버를 갖고 있다.

확장 
WinDbg는 디버거의 지원되는 명령어들을 늘려주고 특정한 디버깅 시나리오 시에 도움을 줄 수 있는 확장 DLL들을 로딩하는 것을 허용한다. 이러한 확장들은 WinDbg를 강력한 디버거로 만들어 주는데 큰 부분을 차지한다. WinDbg는 마이크로소프트 제품 팀이 윈도우를 빌드하는 데 사용되며, 윈도우를 디버깅하는데 요구되는 모든 것들은 이런 확장 DLL들에 포함되어 있다.

확장 명령어들은 항상 ! 접두어를 갖는다.

몇몇 확장 DLL들은 오직 마이크로소프트 안에서만 사용되지만, 대부분은 윈도우 패키지를 위한 공용 디버깅 툴들을 구성한다.

확장 모델은 윈도우의 디버깅 툴들에 포함된 help 파일 안에 문서화되어 있다.

Ext.dll 
Ext는 WinDbg와 함께 출시되며, 기본적으로 로드되는 표준 윈도우 디버거 확장이다.

!analyze command 
가장 많이 사용되는 명령어는 !analyze -v이며, 충돌이나 행 상태 시에 디버깅되는 프로그램의 현재 상태와 머신/프로세스 상태를 분석한다.

옵션 없이 사용하면 간단하게 분석 결과를 보여주며, -v와 -vv는 더 자세한 분석을 보여준다.

Wow6432exts.dll 
Wow6432exts는 WinDbg와 함께 출시되는 표준 윈도우 디버거 확장으로서, WOW64 내에서 실행중인 프로세스들을 디버깅할 때 사용된다.

SOS.dll 
SOS (Son of Strike) 디버깅 확장 (SOS.dll)은 내부 CLR (Common Language Runtime) 환경에 대한 정보를 제공함으로써 비주얼 스튜디오에서 관리되는 프로그램들이나 WinDbg의 디버깅 시 보조해주는 역할을 한다. SOS.dll은 .NET 프레임워크와 함께 자동으로 설치된다. 비주얼 스튜디오에서 SOS.dll을 사용하려면 WDK (윈도우즈 드라이버 키트)를 설치해야 한다. 프로세스나 메모리 덤프를 디버깅하기 위해서는, sos.dll 버전이 .NET 프레임워크 버전과 일치해야 한다. Psscor2와 Psscor4는 SOS의 상위 집합이다.

Psscor2.dll 
Psscor2는 .NET CLR 버전 2.0을 사용하는 .NET 프레임워크 애플리케이션 디버깅 시 사용되는 윈도우 디버거 확장이다. Psscor2는 제품 지원 서비스들의 한 부분으로서 마이크로소프트 내에서 사용되기 위해 개발되었다.

Psscor4.dll 
Psscor4는 .NET 프레임워크 4 애플리케이션의 디버깅에 사용되는 윈도우 디버거 확장이다.

가상 머신과의 연결 
WinDbg는 VM웨어, 윈도우 가상 PC(VPC) 또는 페러럴즈 같은 명명된 파이프를 사용하는 가상 머신 위에 돌아가는 윈도우 커널을 디버깅할 수 있다. 이것은 가상 COM port를 사용함으로써 가능해 진다. 윈도우 8 이후로는 특별한 설정 없이 빠른 커널 디버깅을 가능케 하면서, 네트워크를 통한 커널 디버깅이 허용된다.

프로토콜 
WinDbg 프로토콜은 문서화되어 있지 않지만, IDA 프로와 radare2 역어셈블러에 의해 지원된다.

각주

외부 링크 
 Getting Started: Install Instructions, Part 1, Part 2
 Debugging Tools for Windows - information and free downloads
 WinDbg. From A to Z!  - Theory and examples, 111 slides
 Common WinDbg Commands (Thematically Grouped)
 Tutorial on solving system crashes using WinDbg
 Symbols loading in WinDbg
 Windows Debuggers: Part 1: A WinDbg Tutorial 
 KD extension for fast VMWare and VirtualBox debugging
 SOS Debugging Extension (SOS.dll)
 psscor4 (.NET 4.0) or psscor2 (.NET 2.0-3.5) Replacement for SOS with a superset of commands
  WinDBG v6.12.2.633 available via Windows Driver Kit Version 7.1.0
 Extension for python scripting (pykd) 
 DbgKit: the first GUI extension for Debugging Tools for Windows

디버거