在我过去作为 C/C++ 程序员的生活中,在某些平台和调试器组合上可以选择性地挂起线程。到达断点后,可以发出命令(或单击 GUI 中的内容)来冻结/解除冻结(挂起/唤醒)线程。在执行进一步的步骤/下一步/运行/继续命令时,挂起的线程将不会执行任何指令。
现在的任何 JVM 或 Java IDE 都可以实现这一点吗?我使用 IntelliJ,但没有看到该功能,也无法通过 Google 找到任何信息。
澄清:
- 我不是询问断点的线程策略,例如挂起当前线程或所有线程。我知道 JVM 调试器功能。
- 开发环境是普通的:我使用 IntelliJ Java IDE,并且可以访问相关源代码。
最后,我意识到“Java 调试器”是一个有点模糊的术语。 AFAIK,Sun 发布了一种调试器用于与 JVM 通信的在线调试格式。也许每个 JVM(IBM、Sun、IcedTea、???)都支持不同的调试功能,但我只熟悉 Sun/Oracle JVM。
您绝对可以在 jdb 中挂起单个线程(见下文)。我喜欢 IntelliJ 作为 Java 编辑器。另一方面,它的调试器并不糟糕,但很接近。
Initializing jdb ...
> run
Nothing suspended.
> threads
Group system:
(java.lang.ref.Reference$ReferenceHandler)0x141 Reference Handler cond. waiting
(java.lang.ref.Finalizer$FinalizerThread)0x140 Finalizer cond. waiting
(java.lang.Thread)0x13f Signal Dispatcher running
(java.lang.Thread)0x401 Java2D Disposer cond. waiting
(java.lang.Thread)0x804 TimerQueue cond. waiting
Group main:
(java.lang.Thread)0x322 AWT-AppKit running
(java.lang.Thread)0x323 AWT-Shutdown cond. waiting
(java.awt.EventDispatchThread)0x5ec AWT-EventQueue-0 cond. waiting
(java.util.TimerThread)0x750 Timer-0 cond. waiting
(java.lang.Thread)0x7fd DestroyJavaVM running
> suspend 0x5ec
> threads
Group system:
(java.lang.ref.Reference$ReferenceHandler)0x141 Reference Handler cond. waiting
(java.lang.ref.Finalizer$FinalizerThread)0x140 Finalizer cond. waiting
(java.lang.Thread)0x13f Signal Dispatcher running
(java.lang.Thread)0x401 Java2D Disposer cond. waiting
(java.lang.Thread)0x804 TimerQueue cond. waiting
Group main:
(java.lang.Thread)0x322 AWT-AppKit running
(java.lang.Thread)0x323 AWT-Shutdown cond. waiting
(java.awt.EventDispatchThread)0x5ec AWT-EventQueue-0 waiting in a monitor
(java.util.TimerThread)0x750 Timer-0 cond. waiting
(java.lang.Thread)0x7fd DestroyJavaVM running
> where 0x5ec
[1] java.lang.Object.wait (native method)
[2] java.lang.Object.wait (Object.java:485)
[3] java.awt.EventQueue.getNextEvent (EventQueue.java:558)
[4] java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:263)
[5] java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java:211)
[6] java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:201)
[7] java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:196)
[8] java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:188)
[9] java.awt.EventDispatchThread.run (EventDispatchThread.java:122)
AWT-EventQueue-0[1] where 0x322
Current thread isn't suspended.
AWT-AppKit[1] resume 0x5ec
AWT-AppKit[1] where 0x5ec
Current thread isn't suspended.
AWT-EventQueue-0[1]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)