设置依赖于调用栈的条件断点
Windbg Set Conditional Breakpoints that depends on Call Stack
问题:我需要制作一个脚本或表达式,如果callstack上的某个地方是具有特定名称的函数,则不会中断。
具体问题:如何在调用堆栈上获得函数到字符串列表?
:
Module!MyFunctionWithConditionalBreakpoint
Module!Function1
Module!Function2
Module!Function3
Module!MyFunctionWithConditionalBreakpoint
Module!Function1
Module!ClassA:MemberFunction
Module!Function3
我希望Module!MyFunctionWithConditionalBreakpoint
仅在呼叫来自Module!ClassA:MemberFunction
我需要这个在非托管代码。托管解决方案类似于
System.Diagnostics.StackTrace () .ToString () .Contains("YourMethodName")
在WinDbg中,您可以使用特殊的$ spit函数设置条件断点:
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
}
为什么不在进入Module时设置一个断点呢?MemberFunction为Module启用断点!MyFunctionWithConditionalBreakpoint和离开Module!ClassA:MemberFunction禁用它?
相关文章:
- 条件断点在不应该触发时触发
- 在循环条件中调用const vector size()似乎缺少优化
- 条件断点失败的 GDB 特征调试
- 如何避免参数数量依赖于条件的调用分支?
- 使用条件模板C 调用功能
- GDB有条件断点,怪异的行为
- 如何在 Visual Studio 中基于字符串比较设置条件断点
- 在 if 条件下调用什么重载运算符
- 在什么条件下调用常量取消引用运算符
- 条件断点:此表达式具有副作用,不会计算
- 如何有条件地调用 B::f 仅当派生自 C++11 中的 B 时
- C/C++日志记录功能,支持根据日志级别进行的条件函数调用
- 如何在return语句上全局设置条件断点
- 在for循环条件下调用函数
- 在lambda上使用条件运算符调用std::any_of会得到意想不到的结果
- 为访问冲突定义条件断点
- 在条件断点中使用unsigned long
- 设置依赖于调用栈的条件断点
- 如何放置条件断点来测试CString变量是否为空
- 在什么条件下调用CCmdTarget::OnFinalRelease ?