cpr*_*mer 10 c++ debugging windbg
问题:如果callstack上的某个地方是具有特定名称的函数,我需要创建一个不会破坏的脚本或表达式.
具体问题:如何将callstack上的函数转换为字符串列表?
示例:
Module!MyFunctionWithConditionalBreakpoint
Module!Function1
Module!Function2
Module!Function3
Module!MyFunctionWithConditionalBreakpoint
Module!Function1
Module!ClassA:MemberFunction
Module!Function3
Run Code Online (Sandbox Code Playgroud)
我只想Module!MyFunctionWithConditionalBreakpoint打电话来打破Module!ClassA:MemberFunction
我需要在非托管代码中使用它.托管解决方案就像
System.Diagnostics.StackTrace().toString()方法.包含( "YourMethodName")
low*_*ign 12
在WinDbg中,您可以使用特殊的$ spat函数设置条件断点:
bp Module!MyFunctionWithConditionalBreakpoint "r $t0 = 0;.foreach (v { k }) { .if ($spat(\"v\", \"*Module!ClassA:MemberFunction*\")) { r $t0 = 1;.break } }; .if($t0 = 0) { gc }"
Run Code Online (Sandbox Code Playgroud)
在伪代码中它将是这样的:
t0 = 0
foreach (token in k-command result) {
if (token.contains("Module!ClassA:MemberFunction")) {
t0 = 1
break
}
}
if (t0 == 0) {
// continue execution
} else {
// break into the debugger
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2437 次 |
| 最近记录: |