如何使用cdb(windbg命令行)在会话之间保持断点



我的目标是在CDB(windbg的命令行版本(中的调试会话之间保留断点。我可以使用.restart正确地重新启动,但我总是丢失断点(我使用bu和/或bm命令设置断点。

只使用cdb是否可能?

cdb不可能在.restart之前使用.bpcmds并保存到某个位置,然后在重新启动后重用

对于windbg,您可以使用工作区来保存会话之间的断点

编辑演示

假设您有这些断点

0:000> bl
0 e 00007ff6`0fc4109c     0001 (0001)  0:**** calc!wWinMain
1 e 00007ff6`0fc41820     0001 (0001)  0:**** calc!wWinMainCRTStartup
2 e 00007ff6`0fc41960     0001 (0001)  0:**** calc!matherr
3 e 00007ffb`f033d880     0001 (0001)  0:**** ntdll!NtCreateTimer2
4 e 00007ffb`f033d6a0     0001 (0001)  0:**** ntdll!NtCreateNamedPipeFile
5 e 00007ffb`f02a2000     0001 (0001)  0:**** ntdll!RtlDefaultNpAcl+0x190
6 e 00007ffb`ede53000     0001 (0001)  0:**** KERNELBASE!EnumDynamicTimeZoneInformation+0x60

.bpcmds将向您展示如何设置它们(最后两个是基于rva的无符号bps(

如果您使用bp设置了它们,由于ASLR,它们下次可能无法工作
,因为模块可能加载在不同的地址

0:000> .bpcmds
bu0 calc!wWinMain;
bu1 calc!wWinMainCRTStartup;
bu2 calc!wsetargv;
bu3 ntdll!ZwCreateTimer2;
bu4 ntdll!ZwCreateNamedPipeFile;
bu5 ntdll+2000;
bu6 kernelbase+3000;
0:000>  

复制粘贴到一些暂存空间和之后。重新启动复制粘贴回cdb控制台

您也可以使用.logopen{some_path_to_some_textfile}do.bpcmds和.restart

在这种情况下,您可以从日志文件中复制粘贴bps,并且不必再次打开日志文件,因为windbg/cdb不会在上关闭日志文件。重新启动

这是。重新启动也被转移到日志文件

bu6 kernelbase+3000;
0:000> .restart
CommandLine: calc

最新更新