wenmo8 发布的文章

在调试的过程中,我们很有可能需要知道某个类或结构体的大小,有哪些方式方法呢?

其一,用dx指令观察类型实例,它会列出成员和每个成员的大小,自己计算,比如

 

自己根据类型信息和内存对齐去计算,如果成员是其他复杂的结构,不清楚的话难计算,另外,不知道对齐规则,会算错。所以这样很麻烦。

其二、用dt -v指令,它会直接给出大小

 

其三、上面的指令已经很体贴了,可是如果你是C/C++程序员,可能你会更喜欢??sizeof

 

1、"windbg ANSI Command Tree 1.0"前不能有空格,或空行

2、cmdtree这个窗口的标题 title紧接着一对{""},比如title {"dump analyze"}。一定注意title和后面的内容是分离的,不要写成:title{"dump analyze"}。为了规避这个问题,你可以换行

  title

  {"dump analyze"}

3、"windbg ANSI Command Tree 1.0"和title之间可以有空行,但不能有其他任何内容

4、title后必须有其他元素,否则加载失败

5、注意正文前面的空格,子级的空格一定要比上一级多。一个子级只能比上一级多一个空格,两个都会报错!

当我们调试时,某些情况下,我们需要专门针对crt堆进行分析,但,我们知道进程里可能有多个堆,比如

 

你说哪个是crt堆?

如果你跟踪过crt的代码,那么这个问题就好办了,crt堆是通过msvcrt!_heap_init来分配初始化的,在_heap_init里把crt堆的句柄给了变量_crtheap,所以我们只要看这个变量的值即可,如下

 

即Address=0xfe0000的堆就是该进程的crt堆。