У меня есть программа, которая создает много потоков. Я могу проверить его, используя следующую команду: ps -L pid
. Я также знаю, что процесс загружает некоторые общие библиотеки. Интересно, можно ли проверить, какие потоки принадлежат выбранному общему lib. Этот процесс содержит отладочные символы, и я могу подключиться к ним с помощью команды follwoing: sudo gdb -p pid
Что дальше?gdb - несколько потоков и общие библиотеки
ответ
Мы уже присоединились к процессу.
(gdb) info threads
Показать текущие известные темы. Последний столбец на выходе показывает функцию и библиотеку для последнего фрейма стека для каждого потока.
Если вы хотите увидеть темы запуска подпрограммы и библиотеки они принадлежат, вы можете использовать:
(gdb) thread apply all bt -3
Эта команда покажет вам 3 фреймов стека (от дна) для каждого потока. Если вы используете библиотеку pthread, то функция, которая запускается сразу после start_thread(), является вашей начальной процедурой.
Спасибо (я использовал просто bt без параметров, чтобы увидеть целый bt), это помогло мне проверить некоторые потоки, но иногда вывод был неясным (имя функции, которое вызывает что-то от boost). – Irbis
Темы * не * относятся к любой общей библиотеке, и это делает ваш вопрос чрезвычайно неясным. Что вы на самом деле пытаетесь достичь? –
Пожалуйста, рассмотрите следующий пример: я могу использовать htop для проверки того, сколько использования процессора имеет каждый поток в процессе. Эта программа (процесс) загружает некоторые общие библиотеки. Я хочу узнать, какая из разделяемых библиотек создает потоки, которые занимают время процессора. – Irbis