I'm describing a way to create an extension for Windbg in Visual Studio 2010 Express. The description is applied for the 32-bit version of Windows debugger but the same steps could be easily adopted for the 64-bit debugger. If you're not interested in setting up a Visual Studio configuration, but want a sample extension, you can
download one from CodePlex. That one was created using the steps below.
Create an Empty Visual C++ Project and save the solution as sampext.
Add
sampext.cpp to the project with the following content.
#include "sampext.h"
EXT_DECLARE_GLOBALS();
EXT_CLASS::EXT_CLASS()
{
}
Add
sampext.h to the project with the following content.
#pragma once
#include "engextcpp.hpp"
class EXT_CLASS : public ExtExtension
{
protected:
public:
EXT_CLASS();
EXT_COMMAND_METHOD(ver);
};
Add
ver.cpp to the project file with the following content. This file contains the implementation of the sample command.
#include "ver.h"
EXT_COMMAND(ver,
"Shows version number of the extension.\n",
""
)
{
g_Ext->Out("Sample Windbg Extension in Visual Studio v0.1\n");
}
Add ver.h, too.
#pragma once
#include "sampext.h"
Add
sampext.def that is the definition file.
EXPORTS
;--------------------------------------------------------------------
; Core exports provided by the ExtCpp framework.
;--------------------------------------------------------------------
DebugExtensionInitialize
DebugExtensionUninitialize
DebugExtensionNotify
help
;--------------------------------------------------------------------
; Extension commands.
;--------------------------------------------------------------------
ver
Create a folder called
sdk in the solution folder.
Copy the
inc and
lib folders from the sdk folder of Windbg to the
sdk folder of the solution.
Set the configuration type of the project to
Dynamic Library DLL.
Add
$(SolutionDir)sdk\inc to the additional include directories.
Add
$(SolutionDir)sdk\lib\i386 to the additional library dependencies.
Add
engextcpp.lib to the additional dependencies in the linker input.
Set up the module definition file to
samplext.def in the linker input.
The extension is now ready to be built.