gpt4 book ai didi

c++ - Windbg 设置依赖于调用堆栈的条件断点

转载 作者:可可西里 更新时间:2023-11-01 15:54:15 26 4
gpt4 key购买 nike

问题:我需要制作一个脚本或表达式,如果调用堆栈上某处是具有特定名称的函数,它不会中断。

具体问题:如何将调用堆栈上的函数获取到字符串列表?

示例:

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 中,您可以使用特殊的 $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
}

关于c++ - Windbg 设置依赖于调用堆栈的条件断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7791675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com