windbg - 如何以编程方式引用 WinDbg 中的断点?
问题描述
编程断点 ID
断点语法(docs.microsoft.com) 声称这是关于使用 ID 表达式设置断点的。
断点 ID 不必显式引用。相反,您可以使用解析为与断点 ID 对应的整数的数值表达式。要指示表达式应解释为断点,请使用以下语法。
b?[Expression]
在此语法中,方括号是必需的,Expression 代表解析为对应于断点 ID 的整数的任何数值表达式。
这正是我想做的。但是,它似乎对我不起作用。他们举的一个例子
b?[@$t0]
产生语法错误。我尝试了其他几种方法。
0:000> r $t0 = 300
0:000> ? $t0
Evaluate expression: 768 = 00000300
0:000> b?[@$t0]
^ Syntax error in 'b?[@$t0]'
0:000> b0
^ Syntax error in 'b0'
0:000> b
^ Syntax error in 'b'
0:000> bl?[@$t0]
^ Syntax error in 'bl?[@$t0]'
0:000> bl
0 e 77c27d89 0001 (0001) 0:**** ntdll!LdrpDoDebuggerBreak+0x2b
0:000> bl0
0 e 77c27d89 0001 (0001) 0:**** ntdll!LdrpDoDebuggerBreak+0x2b
0:000> bl300
0:000>
我真的不知道给出的示例是否可行,因为b
并且b0
不起作用。但是,我似乎无法对使用硬编码值的命令使用类似的语法。
我怎样才能利用这个(神话?)功能?
(WinDbg 10.0.17134.12 X86)
解决方案
什么是正则表达式替换这些 (p,u,a) 中的任何一个,它将表示 bp1 .. bpn | ba1 ... 禁令 | bu1 .. 小圆面包
0:000> bl
0 e 62e5f7a0 0001 (0001) xxx
1 e 62e5f7a2 0001 (0001) xxx
2 e 62e5f7a3 0001 (0001) xxx
3 e 62e5f7a5 0001 (0001) xxx
0:000> bp[8-5]
breakpoint 3 exists, redefining
breakpoint 0 redefined
0:000>
或更好的使用场景
0:000> bp .
0:000> bl
0 e 77ac05a6 0001 (0001) 0:**** ntdll!LdrpDoDebuggerBreak+0x2c
0:000> r $t0 =0
0:000> bp[@$t0] ntdll!LdrpCompareServiceChecksum
breakpoint 0 exists, redefining
0:000> bl
0 e 77a4b931 0001 (0001) 0:**** ntdll!LdrpCompareServiceChecksum
0:000> bp[@$t0] kernel32!CreateWaitableTimerExA
breakpoint 0 exists, redefining
0:000> bl
0 e 77584202 0001 (0001) 0:**** kernel32!CreateWaitableTimerExA
0:000>
推荐阅读
- php - 从字符串的末尾开始,一旦到达字符组的第一次出现,如何停止捕获?
- azure - Azure 数据工厂与 App Insight
- python - 元素不可点击,因为另一个元素在 python 中隐藏了它
- debugging - 使用调试器从应用程序中删除函数调用
- python - python中如何弹出消息不干扰后续进程?
- database - 如果结果没有在客户端存根处解包,RPC 模型会发生什么?
- android - 在回收站视图中保留编辑文本
- c++ - VS2017:支持 WinXP 的增强二进制文件?
- windows-10 - 在 Windows Anaconda python 上安装 pytorch 时出现“找不到包错误”
- php - 从 .svg 扩展名之外的 Wikipedia API 获取图像