WinDBG是否支持多行命令?有无换行续行或多行脚本编写方案?
WinDbg多行脚本编写方案
为了避免每次调整脚本都要压缩为单行的繁琐操作,可使用以下两种成熟方案实现多行代码的编写与执行:
方案1:使用外部独立脚本文件(最推荐)
将你编写的多行WinDbg命令完整保存为纯文本文件,后缀可使用.txt/.wds/.wsf任意一种,调试时直接在WinDbg控制台执行脚本加载命令即可运行全部代码:$><你的脚本文件完整路径>
比如你将代码保存为C:\debug_scripts\scan_wxarray.wds,只需在控制台输入$><C:\debug_scripts\scan_wxarray.wds就能直接执行。调整逻辑时直接修改脚本文件内容,重新执行一次加载命令即可,无需改动控制台输入的内容。
方案2:使用续行符实现交互式多行输入
如果你不想单独保存脚本文件,可在每行命令的末尾添加\作为续行符,WinDbg会将所有带续行符的行合并为一个命令块执行。注意续行符后不能加任何空格、注释字符,否则会触发语法错误。
你的示例代码改造为带续行符的版本如下:
r $t1 = 0xe53801c \ r $t2 = 0x2e800 \ .for (r $t3 = 0; @$t3 < 0x400; r $t3 = @$t3 + 1) { \ .if (@@c++( \ ((int)(((MyModule!wxArrayString*)(@$t1+@$t2+(@$t3*8)))->m_compareFunction) >= 0x10000) && \ ((int)(((MyModule!wxArrayString*)(@$t1+@$t2+(@$t3*8)))->m_pItems) >= 0x10000) && \ (((MyModule!wxArrayString*)(@$t1+@$t2+(@$t3*8)))->m_nCount <= 5000) && \ (((MyModule!wxArrayString*)(@$t1+@$t2+(@$t3*8)))->m_nCount > 0) && \ (((MyModule!wxArrayString*)(@$t1+@$t2+(@$t3*8)))->m_nSize <= 10000) && \ (((MyModule!wxArrayString*)(@$t1+@$t2+(@$t3*8)))->m_nSize > 0) \ )) { \ dx ((MyModule!wxArrayString*)(@$t1+@$t2+(@$t3*8))) \ } \ }
如果使用的是新版WinDbg Preview,还可以直接通过顶部菜单文件>打开脚本导入你的代码,内置编辑器支持语法高亮、脚本断点、单步调试,调整后直接点击运行按钮即可执行,调试效率更高。
内容的提问来源于stack exchange,提问作者mojo
相关产品推荐
相关产品推荐

