Linux: C: Как я могу найти, какой поток потерпел крах - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть процесс с 10 потоками.Я хочу выяснить, когда происходит сбой процесса, какой поток вызвал сбой.Есть ли способ сделать это во время выполнения.Я имею в виду не после завершения всего процесса.Я не хочу использовать обработчики сигналов.

спасибо, принц

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Рассмотрите возможность размещения каждого из 10 потоков в отдельном процессе.

0 голосов
/ 06 февраля 2019

Если у вас есть основной файл,

gdb path/to/executable path/to/core/file

(gdb) thread apply all bt full

предоставит вам трассировку стека всех потоков.

Если у вас нет основного файла,

запустите ваш исполняемый файл в gdb с

gdb path/to/executable

(gdb) r

или, если у вас есть аргументы командной строки, вторая команда будет

(gdb) r yourarg1 yourarg2

тогда при сбое приложения

(gdb) thread apply all bt full

Если вы хотите сгенерировать основной файл, до запуска аварийного исполняемого файла вы можете выполнить ulimit -c unlimited в терминале, чтобы установить размер основного файла неограниченным.

Чтобы выйти из GDB, когда вы закончите, просто наберите q для выхода из командной строки (gdb).

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