【问题标题】:Debugging multiple threads in eclipse在eclipse中调试多个线程
【发布时间】:2011-07-19 12:47:32
【问题描述】:

在我正在调试的方法中,我正在生成一个新线程。我需要调试这个新线程而不是父线程的执行。如何在 Eclipse 中做到这一点?

【问题讨论】:

    标签: java eclipse multithreading debugging


    【解决方案1】:

    除了 Shamit Verma 的回答:

    在处理调试多线程 Java 应用程序时,最好不要使用仅暂停设置断点的线程的标准断点。在应用程序中定义标准断点只会中断相关线程。其他线程仍将运行。在eclipse调试器中,如果其他线程已经启动,由于某种原因会导致调试器跳过断点。

    调试Java的解决方案:

    在所需线程中定义断点(我期望的@Run() 方法..),在断点处右键-> 断点属性。

    在断点属性对话框中勾选“Suspend VM”而不是“Suspend thread”。

    如果您这样做,您的整个 VM 将在到达断点时暂停。

    在 C/C++ CDT 中,使用 set scheduler-locking on

    正如@Employed Russian 在answer-to-other-question 中所说,GDB 命令:

    set scheduler-locking on 
    

    将导致其他 C/C++ 线程保持挂起,同时允许当前线程单步执行。此命令可以在 Eclipse/CDT Debug 中执行,方法是暂停程序执行并打开“调试器控制台”透视图并键入:set scheduler-locking on 稍后可以通过以下命令恢复正常:set调度程序锁定关闭

    有关调度程序锁定非停止模式的更多信息,请参阅 GDB 文档,该模式允许其他线程在停止单个线程的同时运行。

    【讨论】:

    • 很遗憾,调试 C/C++ 代码时“暂停 VM”不可用。我正在尝试调试一个原生 Android 应用程序,而不断失去对其他线程的关注让我发疯了!仍在寻找解决方案...
    • @martinako C++ 没有拥有虚拟机。通常,中断总是会中断 gdb 中的所有线程(您需要 specifically request otherwise
    • 你可以做 Eclipse 应该做的事情,通过 Window -> Preferences -> Java -> Debug 将 'Suspend VM' 设置为新断点的默认值。我也可以在调试 Android 时确认“暂停 VM”的工作原理。
    • 挂起 VM 的另一个优点是可以检查其他线程的堆栈。这在一个线程 (GUI) 上的事件在另一个线程(gl 绘图)上的错误时间中断的情况下帮助了我,我想检查这两个线程是如何使用共享数据的。
    • 有时它实际上有助于不怀疑整个虚拟机,尤其是对于“异步测试” - 你测试你的代码是否足够强大以处理任何单个线程上的实际中断(想象一个网络调用在一个线程中花费的时间太长)。
    【解决方案2】:

    在您的 Eclipse 调试窗口中,您可以跳转线程以到达所需的工作线程号并继续您的单步 (F6) 顺序探索。

    【讨论】:

      【解决方案3】:

      除了 Erik Kaju 的回答。如果您正在调试 CDT(这可能也适用于 Java,我不确定)然后

      1. 在 run() 方法(或其等效方法)上设置断点。或者您确定需要的线程和不需要的线程(将被过滤器删除的线程)都在运行的任何时间点。
      2. 开始调试会话。
      3. 当运行中的断点被命中时,您可以转到另一个断点,如果该断点被禁用,则启用该断点。然后右键单击断点 -> 转到过滤器,现在您可以选择您希望断点保持启用的线程,您可以取消选中其余线程。所以这个断点只会针对那个特定的线程被命中。

      缺点是必须为每个调试会话重复此过程。如果有人能提供捷径,那就太好了。

      【讨论】:

        【解决方案4】:

        在新线程的“运行”方法上放置一个断点。一旦线程启动,这将停止执行。

        【讨论】:

        • 我在包含 t.start() 的行上有一个断点,在 run() 的第一行有一个断点。当我执行 Step-Into 时,它会转到 t.start() 之后的行,而不是 run() 之后的行。
        • 这是预期的,在 t.start() 之后点击“Resume”。一段时间后,调试器将在运行的第一行暂停。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-05
        • 2020-11-24
        • 2019-07-21
        • 2023-04-04
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        相关资源
        最近更新 更多