【问题标题】:Breakpoint "concurrency" in IntellijIntellij 中的断点“并发”
【发布时间】:2015-06-09 13:20:12
【问题描述】:

假设我有一个启动两个线程 Thread_AThread_B 的类,每个线程都进行一些计算并偶尔使用我的类的子例程。 (不要担心数据共享,假设它是一个日志行或想象子例程是 Java 库中的一个方法)我想知道是否有一种方法可以将此子例程内的断点调整为已调用的子例程说 thread_A,而不是 B,或者说在此断点之前已命中某个断点。

显然,我总是可以进入调试窗口中的框架选项卡并查看调用者线程,但这很乏味。 thread_A 访问子例程的频率可能远低于 thread_B。我不想看到所有由 Thread_B 发起的断点。

我目前的做法是设置全局标志变量并在调用例程之前对其进行操作。然后我将断点的条件依赖于标志变量。但是,这可能不是非常线程安全且不是很干净。

这样做的正确方法是什么?出于好奇,是否有其他任何其他语言的 IDE 可以做到这一点?

【问题讨论】:

    标签: java debugging intellij-idea concurrency ide


    【解决方案1】:

    产生线程的代码是你的吗? 如果是这样,您可以在线程上设置唯一名称并使用这些名称 在使用断点条件时区分你的线程。

    例如

    //spwaning the thread
    Thread threadA=...
    threadA.setName("thread-A");
    
    // IntelliJ
    Condition : Thread.currentThread().getName().equals("thread-A")
    

    【讨论】:

    • 我知道那行得通。问题是,是的,代码是我的,因为我可以访问它,但这是代码的简化版本。实际上,这是我试图理解别人的代码,如果我知道线程是什么,那么问题就不是问题了! :)
    • 你的线程是否碰巧已经有可以用作“ID”的名称...如果线程在没有明确名称的情况下启动,则会生成一个唯一名称。我目前无法访问正在运行的 IntelliJ ...但是框架选项卡应该为每个正在运行的线程显示类似“Thread[TheThreadsName,0,]”的内容...所以如果您的线程具有唯一的名称,您应该能够通过查看框架选项卡来查看它们有哪些名称并使用它构建断点条件
    • 哈哈,可以的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多