Windbg设置取决于调用堆栈的条件断点 [英] Windbg Set Conditional Breakpoints that depends on Call Stack

查看:309
本文介绍了Windbg设置取决于调用堆栈的条件断点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题:我需要创建一个脚本或表达式,如果callstack上的某个地方是一个具有特定名称的函数,则该表达式不会断开。

The problem: I need to make a script or an expression that that doesn't break if somewhere on callstack is a function with a specific name.

具体问题:如何获取callstack上的函数到字符串列表?

Specific question: How can I get functions on callstack to a list of strings ?

示例

Module!MyFunctionWithConditionalBreakpoint    
Module!Function1   
Module!Function2    
Module!Function3  


Module!MyFunctionWithConditionalBreakpoint    
Module!Function1   
Module!ClassA:MemberFunction    
Module!Function3

我想要 Module!MyFunctionWithConditionalBreakpoint 仅在来自 Module!ClassA:MemberFunction

我需要这个非托管代码。管理解决方案是类似

I need this in unmanaged code. Managed solution is something like


System.Diagnostics.StackTrace()。ToString()。包含(YourMethodName)

System.Diagnostics.StackTrace().ToString().Contains("YourMethodName")


推荐答案


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
}

这篇关于Windbg设置取决于调用堆栈的条件断点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆