在eclipse中调试多个线程

Sha*_*ala 59 java eclipse debugging multithreading

在我正在调试的方法中,我正在生成一个新线程.我需要调试这个新线程的执行而不是父线程.我怎么能在eclipse中这样做?

Eri*_*aju 176

除了Shamit Verma的回答:

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

调试Java的解决方案:

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

在断点属性对话框中,勾选"暂停VM"而不是"暂停线程".

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

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

正如@Employed Russian在回答其他问题时所说,GDB命令:

set scheduler-locking on 
Run Code Online (Sandbox Code Playgroud)

将导致其他C/C++线程保持挂起状态,同时允许当前线程执行.此命令可以在Eclipse/CDT Debug中执行,方法是暂停程序执行并打开"调试器控制台"透视图并输入:set scheduler-locking on 以后可以通过以下方式恢复正常:set scheduler-locking off

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

  • 你可以做Eclipse应该做的事情,通过Window - > Preferences - > Java - > Debug将'Suspend VM'设置为新断点的默认值.此外,我也可以在调试Android时确认"暂停VM". (11认同)
  • @martinako C++没有**VM.通常,break总是会破坏gdb中的所有线程(你需要[具体请求] [http://sourceware.org/gdb/onlinedocs/gdb/Thread_002dSpecific-Breakpoints.html) (2认同)
  • 暂停VM的另一个好处是,可以检查其他线程的堆栈.这帮助了我在一个线程(GUI)上的事件在另一个线程(gl绘图)上的中断时间中断的情况,并且我想检查这两个线程如何使用共享数据. (2认同)

Sha*_*rma 36

在新线程的"run"方法上放置一个断点.一旦线程启动,这将暂停执行.


小智 5

在 Eclipse 调试窗口中,您可以跳转线程以落在所需的工作线程号上,并继续单步执行 (F6) 顺序探索。 在此输入图像描述