Windbg 设置取决于调用堆栈的条件断点
问题:我需要制作一个脚本或表达式,如果调用堆栈上的某个位置是具有特定名称的函数,则该脚本或表达式不会中断。
具体问题:如何将调用堆栈上的函数获取到字符串列表?
示例:
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")
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.
Specific question: How can I get functions on callstack to a list of strings ?
Example:
Module!MyFunctionWithConditionalBreakpoint
Module!Function1
Module!Function2
Module!Function3
Module!MyFunctionWithConditionalBreakpoint
Module!Function1
Module!ClassA:MemberFunction
Module!Function3
I want Module!MyFunctionWithConditionalBreakpoint
to break only if the call cames from Module!ClassA:MemberFunction
I need this in unmanaged code. Managed solution is something like
System.Diagnostics.StackTrace().ToString().Contains("YourMethodName")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 WinDbg 中,您可以使用特殊的 $spat 函数设置条件断点:
在伪代码中,它类似于:
In WinDbg you may set a conditional breakpoint using special $spat function:
In pseudo-code it will be something like:
为什么不在进入 Module!ClassA:MemberFunction 时设置断点以启用 Module!MyFunctionWithConditionalBreakpoint 断点,并在离开 Module!ClassA:MemberFunction 时禁用它?
Why not set a breakpoint on entering Module!ClassA:MemberFunction to enable a breakpoint for Module!MyFunctionWithConditionalBreakpoint and upon leaving Module!ClassA:MemberFunction disabling it?