WINDBG命令系列---!gle
!gle扩展指令显示当前线程的最后一个错误值。
语法
!gle [-all]
Windbg查看类/结构体大小的方法
在调试的过程中,我们很有可能需要知道某个类或结构体的大小,有哪些方式方法呢?
其一,用dx指令观察类型实例,它会列出成员和每个成员的大小,自己计算,比如
自己根据类型信息和内存对齐去计算,如果成员是其他复杂的结构,不清楚的话难计算,另外,不知道对齐规则,会算错。所以这样很麻烦。
其二、用dt -v指令,它会直接给出大小
其三、上面的指令已经很体贴了,可是如果你是C/C++程序员,可能你会更喜欢??sizeof
Windbg .cmdtree命令的cmd文件注意事项
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、注意正文前面的空格,子级的空格一定要比上一级多。一个子级只能比上一级多一个空格,两个都会报错!
Windbg里识别CRT堆
当我们调试时,某些情况下,我们需要专门针对crt堆进行分析,但,我们知道进程里可能有多个堆,比如
你说哪个是crt堆?
如果你跟踪过crt的代码,那么这个问题就好办了,crt堆是通过msvcrt!_heap_init来分配初始化的,在_heap_init里把crt堆的句柄给了变量_crtheap,所以我们只要看这个变量的值即可,如下
即Address=0xfe0000的堆就是该进程的crt堆。
Windbg命令系列---.printf
.printf的行为跟C语言的printf函数类似。
语法
.printf [/D] [Option] "FormatString" [, Argument , ...]