我们能用dt address type 来按类型来输出内存的内容。
但是,有时候symbols里面根本就没有对应的type,比如说,有一个网络消息结构,在C/C++源文件里面,没有申明一个对应的结构,源代码里面都直接使用宏去访问消息中的特定的域。这样的话,为了在Windbg格式中格式化输出这样一个结构,只有自己写扩展命令去做。
问题在于,这样的无类型申明的结构很多,为每一个都写一个扩展明显不值得,而且不得不重新编译扩展dll。
是否已经有一个通用的扩展dll和对应的用于描述结构的"脚本文件",扩展dll每次解析这样的一个"脚本文件"来格式化输出内存内容。
这样的话,每次有个新的需求,只需要写一个新的"脚本文件"来描述这个类型就可以了。
感觉没有现成的命令,这是改进WinDBG一个很好建议,可以按这个思路写一个通用的扩展命令。WinDBG有“合成符号”的概念,可以派给某个地址加个名称:
Synthetic symbols are a way to label an arbitrary address for easy reference. Synthetic symbols can be created in any existing module. The method AddSyntheticSymbol creates a new synthetic symbol. Synthetic symbols can be removed using RemoveSyntheticSymbol. Reloading the symbols for the module deletes all synthetic symbols associated with that module.