我有一个从很多很多地方调用的方法。
void foo()
{
do_some_work();
}
调试 session 的设置很痛苦。如果我正在调试这个:
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()
但仅限于最后一次调用。没有方便的全局、公共(public)、静态变量可以用来设置我所知道的断点条件。
我真正喜欢做的是这样的事情:
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"
最佳答案
如果您使用的是兼容版本的 Visual Studio,您可以设置 Conditional Breakpoints .我没有可用版本的列表,但最简单的方法是按照步骤操作并查看菜单选项是否适合您。
- 进入您的
foo()
方法并在第一行设置断点 - 右键单击断点并单击“条件”
- 从那里您可以根据“点击计数器”设置条件:
如果您能找到您想跳过的 foo()
调用的确切计数(或者甚至是最小阈值),这应该是解决您问题的方法。
使用这种方法,您不需要编写任何代码,您可以单独使用 IDE 解决这个问题。
关于c# - 条件断点取决于调用者启用/禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46350816/