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