Как получить следы потоков в многопоточном запущенном процессе C ++? - PullRequest
1 голос
/ 03 марта 2010

Для отладки многопоточных программ в таких ситуациях, как взаимоблокировка или livelock, какие полезные утилиты? Мне было интересно, дает ли gcore дамп стека для всех запущенных threds в процессе или только для основного потока. Кроме того, gcore приостанавливает / убивает запущенный процесс? Любая информация об отладке многопоточных программ будет очень полезна.

Ответы [ 3 ]

1 голос
/ 03 марта 2010

gdb поддерживает переключение между потоками, чтобы исследовать состояние всего происходящего. Здесь - дополнительная информация.

0 голосов
/ 03 марта 2010

GDB имеет несколько приятных функций для работы с потоками. Один из моих любимых - thread apply. Это позволяет вам запускать одну и ту же команду для нескольких потоков.

Например, если вы хотите получить обратный след всех потоков, вы можете использовать это:

thread apply all where

Чтобы разбить это, команда начинается с thread apply.

Далее идет список тем. Здесь я использовал ключевое слово all, чтобы применить это к каждому потоку в процессе. Вы также можете использовать разделенный пробелами список идентификаторов потоков GDB (thread apply 1 2 3 command).

И, наконец, приходит команда выполнить. Я использовал where, который показывает стек вызовов, но вы можете использовать любую команду, какую захотите.

0 голосов
/ 03 марта 2010

Как сказал Карл, GDB поддерживает потоки. Использование пользовательского интерфейса (такого как предоставляемый Eclipse) для GDB делает это проще, но вы можете получить информацию о потоках при запуске через командную строку, введя «информационные потоки». Это выведет список потоков и позволит вам переключаться, набирая «поток 3» и т. Д. После того, как вы переключитесь на поток, вы можете сделать обратные трассировки, чтобы увидеть текущий стек потоков и другие команды, которые вы использовали для одного резьбовой процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...