windbg的breakpoint 0 hit和 3hit的区别
的有关信息介绍如下:1 .logopen logfile.log该命令的作用是创建一个windbg的日志文件,从该文件创建开始直到.logclose调用,所有debug的过程都会log到logfile.log文件中。这对于调试过程的回忆和追踪是有用处的。2 bp module!functionname(或者内存地址)该命令的作用是创建在指定的地方插入一个断点。当程序运行到断点时,会产生中断等待用户唤陵扰处理(这个过程叫做中断命中breakpoint hit)。程序中可以加入多个中断。当我们在动态调试程序的时候,该命令较为常用,但是对于静态的dump文件不需要。3 bl该命令的作用是列出所有断电信息。0:000> bp mydebug!CallFast0:000> bl 0 e 00401430 0001 (0001) 0:**** mydebug!CallFast4 ln 某个地址(该地址可以是register的值,module!function等只要是能够表示内存地址的均可)该命令的作用是列出与该指定地址附近的函数(list nearest function)ln 00401430D:\study\mydebug\mydebug.cpp(48)(00401430) mydebug!CallFast | (004014f0) mydebug!MyFunction5 dd 内存地址 (可选参数Lx表示显示的长度,缺省长度为8)该命令的作用以每4个字节为一个单元快,显示从指定内存地址开始的内容。缺省情况下会显示连续32块内存地址,即32*4个字节内的内容。当然,显示太多没有意义的内存内容只会干扰我们,因此我们也可使指定所要显示的单元块的个数,如dd esp L4 表示显示从esp指定地址开始的4个单元块,即连续16个字节的内容dd esp0012fe04 0012feb8 00000000 7ffdd000 cccccccc0012fe14 cccccccc cccccccc cccccccc cccccccc0012fe24 cccccccc cccccccc cccccccc cccccccc0012fe34 cccccccc cccccccc cccccccc cccccccc0012fe44 cccccccc cccccccc cccccccc 000000000012fe54 00000000 00000004 004310d8 0012feb80012fe64 00401402 00000006 0012ff18 000000000012fe74 7ffdd000 cccccccc cccccccc cccccccc0:000> dd esp L40012fe04 0012feb8 00000000 7ffdd000 cccccccc这个命令较为常用常用6 db 内存地址 (Lx 缺省长度为8)该命令汪蔽的作用和dd非常相似,不过db显示的内存单元块大小为一个Byte,并且和dd显示的方向正好相反(高-低)。该命令相比dd,其好处是它会在右边显和旦示出其相应的ASCII码,这在查看某个内存中的字符串时尤为有用。db 0043112400431124 52 65 73 75 6c 74 20 6f-66 20 74 68 65 20 64 69 Result of the di00431134 76 69 73 69 6f 6e 20 6f-66 20 25 64 20 62 79 20 vision of %d by00431144 25 64 20 69 73 20 3a 25-64 00 00 00 00 00 00 00 %d is :%d.......00431154 00 00 00 00 69 33 38 36-5c 63 68 6b 65 73 70 2e ....i386\chkesp.00431164 63 00 00 00 00 00 00 00-54 68 65 20 76 61 6c 75 c.......The valu00431174 65 20 6f 66 20 45 53 50-20 77 61 73 20 6e 6f 74 e of ESP was not00431184 20 70 72 6f 70 65 72 6c-79 20 73 61 76 65 64 20 properly saved00431194 61 63 72 6f 73 73 20 61-20 66 75 6e 63 74 69 6f across a functio该命令显示了从内存00431124处开始连续16*8的内容,最右边显示的是其对应的ASCII码的值。7 da 内存地址该命令是显示指定内存地址的字符串的值,而不会象dd,db那样显示连续8个单元块的内容,而是遇到结束符即结束,因此在查看指定内存中的字符串时尤为有用0:000> da 0043112400431124 "Result of the division of %d by "00431144 "%d is :%d"该命令只显示了00431124开始的字符串的值,然后自动终止。而用db的话效果如上所示。8 k, kb, kv,knk命令的作用是显示出所有call stack中的内容。kb外加显示用来传输参数的前3个双字节(double word)的地址。kv则在kb基础上外加显示其调用规则(calling convention)。kn:在kb的基础上最左边另外显示call stack frames的frame number,。从而可以通过.frame命令选择相应的call stack frame进行调试,例如dv可以查看当前call stack frame的传入参数值和函数体中临时变量的值。如下所示:0:000> k *** Stack trace for last set context - .thread/.cxr resets itChildEBP RetAddr 0012fe60 00401402 mydebug!CallFast+0x60 [D:\study\mydebug\mydebug.cpp @ 58]0012feb8 00401393 mydebug!CallwithStd+0x42 [D:\study\mydebug\mydebug.cpp @ 44]0012ff18 0040130a mydebug!CallWithCDecl+0x43 [D:\study\mydebug\mydebug.cpp @ 37]0012ff80 00401969 mydebug!main+0x9a [D:\study\mydebug\mydebug.cpp @ 28]0012ffc0 77e6f23b mydebug!mainCRTStartup+0xe9 [crt0.c @ 206]0012fff0 00000000 kernel32!BaseProcessStart+0x230:000> kb *** Stack trace for last set context - .thread/.cxr resets itChildEBP RetAddr Args to Child 0012fe60 00401402 00000006 0012ff18 00000000 mydebug!CallFast+0x60 [D:\study\mydebug\mydebug.cpp @ 58]0012feb8 00401393 004310d8 00000004 00000006 mydebug!CallwithStd+0x42 [D:\study\mydebug\mydebug.cpp @ 44]0012ff18 0040130a 0043101c 00000004 00000006 mydebug!CallWithCDecl+0x43 [D:\study\mydebug\mydebug.cpp @ 37]0012ff80 00401969 00000001 00440e90 00440dc0 mydebug!main+0x9a [D:\study\mydebug\mydebug.cpp @ 28]0012ffc0 77e6f23b 00000000 00000000 7ffdd000 mydebug!mainCRTStartup+0xe9 [crt0.c @ 206]0012fff0 00000000 00401880 00000000 78746341 kernel32!BaseProcessStart+0x230:000> kv *** Stack trace for last set context - .thread/.cxr resets itChildEBP RetAddr Args to Child 0012fe60 00401402 00000006 0012ff18 00000000 mydebug!CallFast+0x60 [D:\study\mydebug\mydebug.cpp @ 58]0012feb8 00401393 004310d8 00000004 00000006 mydebug!CallwithStd+0x42 [D:\study\mydebug\mydebug.cpp @ 44]0012ff18 0040130a 0043101c 00000004 00000006 mydebug!CallWithCDecl+0x43 [D:\study\mydebug\mydebug.cpp @ 37]0012ff80 00401969 00000001 00440e90 00440dc0 mydebug!main+0x9a [D:\study\mydebug\mydebug.cpp @ 28]0012ffc0 77e6f23b 00000000 00000000 7ffdd000 mydebug!mainCRTStartup+0xe9 [crt0.c @ 206]0012fff0 00000000 00401880 00000000 78746341 kernel32!BaseProcessStart+0x23 (FPO: [Non-Fpo]) kn # ChildEBP RetAddr 00 0012fe60 00401402 mydebug!CallFast+0x60 [D:\study\mydebug\mydebug.cpp @ 58]01 0012feb8 00401393 mydebug!CallwithStd+0x42 [D:\study\mydebug\mydebug.cpp @ 44]02 0012ff18 0040130a mydebug!CallWithCDecl+0x43 [D:\study\mydebug\mydebug.cpp @ 37]03 0012ff80 00401969 mydebug!main+0x9a [D:\study\mydebug\mydebug.cpp @ 28]04 0012ffc0 77e6f23b mydebug!mainCRTStartup+0xe9 [crt0.c @ 206]05 0012fff0 00000000 kernel32!BaseProcessStart+0x23//左边显示的即为call stack frame number运行.frame frameno ,如.frame 0 即可选择相应