利用 windbg 脚本动态调试代码
利用脚本可以自动设置断点,并暂停之后处理事务是核心。不用一对一检查
1.先编写代码 windbgTest.cpp ,编译后一定要保留windbgTest.pdb 文件,代码如下
2.编写windbg 脚本 SRCIPT_WINDBGTEST_DEBUG.TXT , 内容如下
3.打开windbg,用户模式打开windbgTest.exe,命令窗口中
输入$$><D:\!Prog\winDBG\windbgTest\SRCIPT_WINDBGTEST_DEBUG.txt
然后正常运行就可以自动记录 printf 函数中的内容
最后不要忘记关闭日志文件 windbg命令窗口中输入 .logclose
4.打开log文件验证结果
下载测试代码包括脚本
1.先编写代码 windbgTest.cpp ,编译后一定要保留windbgTest.pdb 文件,代码如下
#include "stdafx.h" int main(int argc, char* argv[]) { char buf[][5]={ {"buf1"}, {"buf2"}, {"buf3"}}; for(int i=0;i<3;i++) { printf("%s\n",buf[i]); //要检查输出内容 } return 0; }
2.编写windbg 脚本 SRCIPT_WINDBGTEST_DEBUG.TXT , 内容如下
$$=================================================================== $$ $$><D:\!Prog\winDBG\windbgTest\SRCIPT_WINDBGTEST_DEBUG.txt $$ 测试结束后 .logclose $$=================================================================== .logopen D:\!Prog\winDBG\windbgTest\windbgTest.log bp windbgTest!printf "da edx;g" <----暂停后要做的事务
3.打开windbg,用户模式打开windbgTest.exe,命令窗口中
输入$$><D:\!Prog\winDBG\windbgTest\SRCIPT_WINDBGTEST_DEBUG.txt
然后正常运行就可以自动记录 printf 函数中的内容
最后不要忘记关闭日志文件 windbg命令窗口中输入 .logclose
CommandLine: D:\!Prog\winDBG\windbgTest\Debug\windbgTest.exe Symbol search path is: D:\WinDDK\Symbols_Full SRV*D:\WinDDK\Symbols_Dynamic* http://msdl.microsoft.com/download/symbols Executable search path is: ModLoad: 00400000 00426000 windbgTest.exe ModLoad: 7c920000 7c9b6000 ntdll.dll ModLoad: 7c800000 7c91e000 C:\WINDOWS\system32\kernel32.dll (f30.598): Break instruction exception - code 80000003 (first chance) eax=00241eb4 ebx=7ffd6000 ecx=00000001 edx=00000002 esi=00241f48 edi=00241eb4 eip=7c92120e esp=0012fb20 ebp=0012fc94 iopl=0 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202 ntdll!DbgBreakPoint: 7c92120e cc int 3 0:000> $$><D:\!Prog\winDBG\windbgTest\SRCIPT_WINDBGTEST_DEBUG.txt <---手动输入 Opened log file 'D:\!Prog\winDBG\windbgTest\windbgTest.log' *** WARNING: Unable to verify checksum for windbgTest.exe 0:000> g <---自动记录printf的内容 0012ff70 "buf1" 0012ff75 "buf2" 0012ff7a "buf3" eax=00000000 ebx=00000000 ecx=7c800000 edx=7c99e120 esi=7c92de6e edi=00000000 eip=7c92e514 esp=0012fe54 ebp=0012ff50 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 ntdll!KiFastSystemCallRet: 7c92e514 c3 ret 0:000> .logclose Closing open log file D:\!Prog\winDBG\windbgTest\windbgTest.log
4.打开log文件验证结果
Opened log file 'D:\!Prog\winDBG\windbgTest\windbgTest.log' *** WARNING: Unable to verify checksum for windbgTest.exe 0:000> g 0012ff70 "buf1" 0012ff75 "buf2" 0012ff7a "buf3" eax=00000000 ebx=00000000 ecx=7c800000 edx=7c99e120 esi=7c92de6e edi=00000000 eip=7c92e514 esp=0012fe54 ebp=0012ff50 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 ntdll!KiFastSystemCallRet: 7c92e514 c3 ret 0:000> .logclose Closing open log file D:\!Prog\winDBG\windbgTest\windbgTest.log
下载测试代码包括脚本