Windows2003-3790/inetsrv/iis/svcs/staxcore/dbgdumpx
2020-09-30 16:53:55 +02:00
..
dbgdumpx.c First commit 2020-09-30 16:53:55 +02:00
makefile First commit 2020-09-30 16:53:55 +02:00
readme.txt First commit 2020-09-30 16:53:55 +02:00
sources First commit 2020-09-30 16:53:55 +02:00

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 "!<dll name>.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 <pid>"
  - Type "!extdemdl.help"... you'll see the following

Demo CDB debugger extensions
   help -- This command 
   dump <Struct Type Name>@<address expr> 

  - 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.