2015-05-26 1 views
0

У меня есть программа, которая создает много потоков. Я могу проверить его, используя следующую команду: ps -L pid. Я также знаю, что процесс загружает некоторые общие библиотеки. Интересно, можно ли проверить, какие потоки принадлежат выбранному общему lib. Этот процесс содержит отладочные символы, и я могу подключиться к ним с помощью команды follwoing: sudo gdb -p pid Что дальше?gdb - несколько потоков и общие библиотеки

+0

Темы * не * относятся к любой общей библиотеке, и это делает ваш вопрос чрезвычайно неясным. Что вы на самом деле пытаетесь достичь? –

+0

Пожалуйста, рассмотрите следующий пример: я могу использовать htop для проверки того, сколько использования процессора имеет каждый поток в процессе. Эта программа (процесс) загружает некоторые общие библиотеки. Я хочу узнать, какая из разделяемых библиотек создает потоки, которые занимают время процессора. – Irbis

ответ

2

Мы уже присоединились к процессу.

(gdb) info threads 

Показать текущие известные темы. Последний столбец на выходе показывает функцию и библиотеку для последнего фрейма стека для каждого потока.

Если вы хотите увидеть темы запуска подпрограммы и библиотеки они принадлежат, вы можете использовать:

(gdb) thread apply all bt -3 

Эта команда покажет вам 3 фреймов стека (от дна) для каждого потока. Если вы используете библиотеку pthread, то функция, которая запускается сразу после start_thread(), является вашей начальной процедурой.

+0

Спасибо (я использовал просто bt без параметров, чтобы увидеть целый bt), это помогло мне проверить некоторые потоки, но иногда вывод был неясным (имя функции, которое вызывает что-то от boost). – Irbis