Отладка многопоточных программ в Eclipse CDT: поиск потоков - PullRequest
0 голосов
/ 27 февраля 2019

TLDR: программа на C, сотни потоков, представление отладки Eclipse (Oxygen 3) CDT с длинным деревом.Как искать?

Я отлаживаю некоторое программное обеспечение, которое я написал (на C, FWIW), которое может генерировать несколько сотен потоков.Около 300 из них запускаются при запуске, и примерно столько же запускаются динамически для выполнения задач во время выполнения.Во время определенных операций у меня может быть запущено более 500 потоков.

В более ранних версиях программного обеспечения было возможно выполнить задачу для его отладки таким образом, чтобы при сбое работало только несколько потоков (например, произошел segfault и т. д.), поэтому было бы разумно просто просмотреть список потоков в представлении «Отладка» и понять, что происходит.Совсем недавно я запустил еще много потоков в начале, и, хотя это принесло огромную выгоду с точки зрения производительности, это означает, что в любой момент у меня будет список потоков, которые слишком длинные, чтобы просматривать их вручную.

Как мне найти поток, основанный на чем-то, что я знаю о потоке, то есть с какой функцией он был запущен (передан pthread_create ())?В частности, как я могу искать в дереве, отображаемом в окне отладки?Кроме того, я нашел способ скопировать содержимое этого представления в буфер обмена, но (необъяснимо) это копирует только то, что видно, а не фактическое содержимое дерева - как я могу автоматически развернуть все дерево, чтобы я мог его скопироватьа поискать в текстовом редакторе?Нажатие на маленькие стрелки для расширения каждого из сотен потоков в соответствующие им стеки вызовов просто нецелесообразно.

Я занимаюсь разработкой на платформе RHEL 6 (долгая история, переход на современность еще не завершен), а дляВ тот момент, когда я обнаружил препятствия при обновлении после Eclipse Oxygen 3a (4.7.3a), так что сейчас я застрял на этом.

РЕДАКТИРОВАТЬ: я должен уточнить - это правда, что я могу просто нажать Ctrl-F в окне отладки, и я получаю диалоговое окно поиска.Тем не менее, и я всерьез отбрасываю здесь свою челюсть в недоумении, он также ищет только то, что видно , а не фактическое содержимое дерева.Так что для того, чтобы это было полезно, мне все равно пришлось бы расширять каждый поток в списке вручную;по-прежнему нет команды для этого.

1 Ответ

0 голосов
/ 11 марта 2019

Похоже, что просто невозможно найти список потоков в представлении Debug в Eclipse, что действительно полезно.Опять же, функции «Найти» и «Копировать стопку» (доступные по щелчку правой кнопкой мыши) работают только с текстом, видимым в представлении GUI, а не с реальным содержимым дерева.

Итак, насколькоЯ могу сказать, что единственный способ получить информацию, которую я хочу, это запросить gdb напрямую через представление консоли отладчика:

thread apply all bt

OF COURSE, содержимое представления консоли отладчика не имеет прямого поиска (в отличие отобычная консоль и большинство других представлений в Eclipse), поэтому текстовый листинг необходимо затем скопировать и вставить в какой-то другой редактор и выполнить поиск, чтобы найти нужную нить.Затем с этой информацией я могу прокрутить ее в списке отладки, развернуть трассировку этого потока и продолжить отладку.

...