用Windbg查看stl的容器实在是已经让人悲伤的事情,为了方便,所以写了这么3个脚本
vector:
r? $t0 = ${$arg1}
.if (${/d:$VectorType}) { r? $t0 = @@C++(*((${$VectorType} *)@$t0)) }
.if (${/d:$arg2}) { .if ($sicmp("${$arg2}", "-c") == 0) { r $t2 = 0 aS ${/v:command} "${$arg3}" } } .else { r $t2 = 1 aS ${/v:command} " " }
r? $t1 = @@C++(@$t0._Mylast) r? $t0 = @@C++(@$t0._Myfirst)
.printf "size = %d\n", @@C++((@$t1 - @$t0))
.while (@$t0 != @$t1) { .if ($t2 == 1) { ?? @@c++(@$t0->_Bx) } .else { r? $t9 = @$t0->_Bx command }
r? $t0=@$t0+1 }
ad command
|
list:
r? $t0 = ${$arg1}
.if (${/d:$ListType}) { r? $t0 = @@C++(*((${$ListType} *)@$t0)) }
.if (${/d:$arg2}) { .if ($sicmp("${$arg2}", "-c") == 0) { r $t2 = 0 aS ${/v:command} "${$arg3}" } } .else { r $t2 = 1 aS ${/v:command} " " }
.printf "size = %d\n", @@C++(@$t0._Mysize)
r? $t1 = @@C++(@$t0._Myhead) r? $t0 = @@C++(@$t0._Myhead) r? $t0 = @@C++(@$t0->_Next)
.while (@$t0 != @$t1) { .if ($t2 == 1) { ?? @@c++(@$t0->_Myval._Bx) } .else { r? $t9 = @$t0->_Myval._Bx command }
r? $t0 = @@C++(@$t0->_Next) }
ad command
|
map:
.if ($sicmp("${$arg1}", "-n") == 0) {
.if (@@C++(@$t0->_Left) != @@C++(@$t1)) { .push /r /q r? $t0 = @$t0->_Left $$>a< ${$arg0} -n .pop /r /q } .if (@@C++(@$t0->_Isnil) == 0) { .if (@$t2 == 1) { .printf /D "%p\n", @$t0, @$t0 .printf "key = " ?? @$t0->_Myval.first .printf "value = " ?? @$t0->_Myval.second } .else { r? $t9 = @$t0->_Myval command } } .if (@@C++(@$t0->_Right) != @@C++(@$t1)) { .push /r /q r? $t0 = @$t0->_Right $$>a< ${$arg0} -n .pop /r /q } } .else {
r? $t0 = ${$arg1}
.if (${/d:$MapType}) { r? $t0 = @@C++(*((${$MapType} *)@$t0)) }
.if (${/d:$arg2}) { .if ($sicmp("${$arg2}", "-c") == 0) { r $t2 = 0 aS ${/v:command} "${$arg3}" } } .else { r $t2 = 1 aS ${/v:command} " " }
.printf "size = %d\n", @@C++(@$t0._Mysize) r? $t0 = @$t0._Myhead->_Parent r? $t1 = @$t0->_Parent $$>a< ${$arg0} -n
ad command }
|