TLDR:C程序,数百个线程,带有冗长树的Eclipse(Oxygen 3)CDT调试视图。如何搜索?
我正在调试我编写的一些软件(使用C,FWIW),该软件可以生成数百个线程。其中大约有300个是在启动时启动的,大约有其他数量的动态启动是在运行时执行任务。在某些操作期间,我可以运行超过500个线程。
在该软件的早期版本中,可能会出现问题,以某种方式调试它,以便在发生故障(例如segfault等)时仅运行少数几个线程,因此合理地进行浏览调试视图中的线程列表,并了解发生了什么。最近,我从一开始就启动了更多的线程,这虽然对性能产生了巨大的好处,但是这意味着在任何时候我都会有一个线程列表,该列表太长了,无法手动浏览。
如何根据我对该线程的了解来查找线程,即该线程以什么功能启动(传递给pthread_create())?具体来说,如何搜索“调试”窗口中显示的树?另外,我找到了一种方法可以将该视图的内容复制到剪贴板,但是(莫名其妙地)这仅复制了可见的内容,而不是实际的树内容-我如何自动扩展整棵树以便复制它并在文本编辑器中搜索?单击小箭头将数百个线程中的每一个扩展到各自的调用堆栈是不合理的。
我正在RHEL 6平台上进行开发(从长远来看,尚待过渡到现代性),目前,我已经发现了超越Eclipse Oxygen 3a(4.7.3a)升级的障碍,所以我就是暂时停留。
编辑:我应该澄清一下-的确,我可以在“调试”窗口中按Ctrl-F,然后出现搜索对话框。但是,在这里我真是难以置信,我也只搜索可见的内容,而不是树的实际内容。因此,为了使此功能有用,我仍然必须手动扩展列表中的每个线程;似乎仍然没有命令执行此操作。
答案 0 :(得分:0)
看来,根本没有办法以实际上有用的方式在Eclipse的“调试”视图中搜索线程列表。同样,“查找”和“复制堆栈”功能(可通过右键单击访问)仅对GUI视图中可见的文本起作用,而不对树的真实内容起作用。
据我所知,获取所需信息的唯一方法是通过Debugger Console视图直接查询gdb:
thread apply all bt
当然,不能直接搜索Debugger Console视图的内容(与常规Console和Eclipse中的大多数其他视图不同),因此必须将文本列表复制并粘贴到其他编辑器中并进行搜索,才能找到我正在寻找的线程。然后,借助这些信息,我可以在“调试”列表中滚动至该信息,展开该线程的跟踪,然后继续进行调试。