c# - 条件断点取决于调用者启用/禁用

标签 c# visual-studio debugging

我有一个从很多很多地方调用的方法。

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 .我没有可用版本的列表,但最简单的方法是按照步骤操作并查看菜单选项是否适合您。

  1. 进入您的foo() 方法并在第一行设置断点
  2. 右键单击断点并单击“条件”
  3. 从那里您可以根据“点击计数器”设置条件:

Conditional Breakpoint in Visual Studio

如果您能找到您想跳过的 foo() 调用的确切计数(或者甚至是最小阈值),这应该是解决您问题的方法。

使用这种方法,您不需要编写任何代码,您可以单独使用 IDE 解决这个问题。

关于c# - 条件断点取决于调用者启用/禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46350816/

相关文章:

c# - 将 WPF 项目链接到 Windows Azure 数据库

c# - .net 核心跨平台桌面应用程序

c++ - 为什么 Visual Studio 不在 self 赋值时发出警告 (int foo = foo;)

c# - 手动迁移时 '00' 附近的语法不正确

visual-studio - 如何部署加密数据的SSIS项目?

c# - 如何从 C# 查找 Windows 通用应用程序窗口

node.js - Meteor npm 脚本的 WebStorm Debug模式

visual-studio-2010 - NUnit 2.5.7 需要在 VS2010 下显式调试附加

c# - 在 C# 中使用参数启动新线程

c# - 在 Entity Framework 5 Code First 中覆盖 SaveChanges 以复制旧遗留库的行为