Platinum CDB Extension Library: General Usage: -include ptdbgext.h and link with ptdbgext.lib -define structure using macros described below -define globals ExtensionNames, Extensions, and g_pExtensionInitRoutine -Use DEFINE_EXPORTED_FUNCTIONS do define exported functions -Export "dump" and "help" from your dll using the def file -Copy extension dll to a directory in your path -Start CDB and attach to process -Type "!.help" for help Demo files: - extdemex directory contains sample application to debug - extdemdl directory contains sample CDB extension dll Demo Usage: - Attach to process using "cdb /p " - Type "!extdemdl.help"... you'll see the following Demo CDB debugger extensions help -- This command dump @
- Type "dd extdemex!g_pMyClass l 1"... you'll see something like the following: 00402190 00313240 - Using the 2nd number, type "!extdemdl.dump CMyClass@0x00313240": 0:001> !extdemdl.dump CMyClass@0x00313240 ++++++++++++++++ CMyClass@313240 ++++++++++++++++ <... dump deleted> m_MyStruct @0x00313248 <... dump deleted> ---------------- CMyClass@313240 ---------------- - Use the m_MyStruct field to dump the embeded structure by typing "!extdemdl.dump MY_STRUCT@0x00313248" ++++++++++++++++ MY_STRUCT@313248 ++++++++++++++++ m_cbName 26 m_szName This is a MY_STRUCT struct ---------------- MY_STRUCT@313248 ---------------- ** Macro usage from _dbgdump.h // Usage: // Create a head file that includes this file and defines your field // descriptors using only the following macros: // // BIT MASKS: // BEGIN_BIT_MASK_DESCRIPTOR(BitMaskName) - // start bit mask descriptor // BIT_MASK_VALUE(Value) - // Give a defined value for a bit mask. Uses #Value // to describe the value. If your bitmask values are // defined using #defines... then only the numerical // values will appear in the dump... use BIT_MASK_VALUE2 // instead. // BIT_MASK_VALUE2(Value, Description) - // Give a value and description for a bit mask. // END_BIT_MASK_DESCRIPTOR // Mark the end of a bit mask descriptor // // ENUMS: // BEGIN_ENUM_DESCRIPTOR(BitMaskName) - // start enum descriptor // ENUM_VALUE(Value) - // Give a defined value for a enum. Uses #Value // to describe the value. // ENUM_VALUE2(Value, Description) - // Give a value and description for a enum. // END__DESCRIPTOR - // Mark the end of a enum descriptor // // STRUCTURES & CLASSES: // BEGIN_FIELD_DESCRIPTOR(FieldDescriptorName) - // start field decscritor // FIELD3(FieldType, StructureName, FieldName) - // define non-enum public field // FIELD4(FieldType, StructureName, FieldName, AuxInfo) - // define enum public field // For FIELD4, you should pass one of the following to // to define the aux info: // GET_ENUM_DESCRIPTOR(x) // GET_BITMASK_DESCRIPTOR(x) // Where x is one of the values used to define a bit mask // or enum. // // END_FIELD_DESCRIPTOR - // Define end of field descriptors for class/struct // // GLOBALS: - Used to tell ptdbgext what class/structures to dump // BEGIN_STRUCT_DESCRIPTOR - // Marks the begining of the global stuct descriptor // STRUCT(TypeName,FieldDescriptor) - // Defines a struct to dump. TypeName is the name of the // type, and FieldDescriptor is a name given in a // BEGIN_FIELD_DESCRIPTOR. // // NOTE: You must define bit masks & enums before classes and structures. // You must also define the global STRUCT_DESCRIPTOR last.