问题:我需要制作一个脚本或表达式,如果调用堆栈上的某处是具有特定名称的函数,则该脚本或表达式不会中断。
具体问题:如何将调用堆栈上的函数获取到字符串列表?
Example:
Module!MyFunctionWithConditionalBreakpoint
Module!Function1
Module!Function2
Module!Function3
Module!MyFunctionWithConditionalBreakpoint
Module!Function1
Module!ClassA:MemberFunction
Module!Function3
I want Module!MyFunctionWithConditionalBreakpoint
仅当呼叫来自时才中断Module!ClassA:MemberFunction
我在非托管代码中需要这个。托管解决方案类似于
System.Diagnostics.StackTrace().ToString().Contains("YourMethodName")
在 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 }"
在伪代码中,它会是这样的:
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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)