【发布时间】:2017-09-21 18:23:58
【问题描述】:
我有一个从很多很多地方调用的方法。
void foo()
{
do_some_work();
}
调试会话的设置很痛苦。如果我正在调试这个:
void main()
{
func1(); // which deep, deep down calls foo() over and over and over
func2(); // which calls foo() over and over and over
foo(); // This is the one that I actually want to debug
}
我想调试foo(),但只能从最后一次调用开始。没有方便的全局、公共、静态变量可以用来设置断点条件,我知道。
我真正想做的是这样的:
void main()
{
func1(); // which deep, deep down calls foo() over and over and over
func2(); // which calls foo() over and over and over
Enable_debugger();
foo(); // This is the one that I actually want to debug
}
在foo() 中设置我的断点,并为除最后一个实例之外的每个实例跳过它。
我可以采取什么方法吗?
为什么不直接在main() 中设置调试点然后介入呢?因为降级到foo() 是很多 步入。
编辑 我确实发现了一个小骗子。我可以这样做:
System.Threading.Thread.SetData(
System.Threading.Thread.GetNamedDataSlot("BREAKPOINT"), "on");
然后在上面设置条件断点:
(string)System.Threading.Thread.GetData(
System.Threading.Thread.GetNamedDataSlot("BREAKPOINT")) == "on"
【问题讨论】:
-
据我所知,没有方便的全局、公共、静态变量可以用来设置断点。有什么理由不能添加?您可以在 main 中的
foo()之前添加一个设置为true的全局变量,并在foo()中设置一个条件断点? -
根据您的 VS 版本,您可以右键单击断点并设置“条件”。其中一个条件是命中计数。因此,如果您可以确定确切的计数或最小阈值,您可以相应地设置。另外,嗨克林顿哈哈
-
@Clinton Pierce,看来您已经找到了解决方案,如果可能的话,您可以分享解决方案作为答案(不在问题/评论中)。所以你可以标记并关闭这个案例。
标签: c# visual-studio debugging