отладка работающего демона с помощью GDB - PullRequest
0 голосов
/ 26 октября 2019

Я хочу отладить работающий демон с помощью GDB. У меня есть идентификатор процесса соответствующего процесса. Я набрал: GDB прикрепить идентификатор процесса нити информации

Я получаю список потоков. * один текущий текущий поток (поправьте меня, если я ошибаюсь)

Теперь я отправляю:

systemctl kill daemonname (эту команду я выполняю на другом терминале)

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

, так как мой демон зависает. это не убивает должным образом. Я попытался с помощью команды статуса службы имени. Так как он застревает после вышеупомянутой команды "servicename status". Я хочу отследить последний поток, который застревает, так как мой демон все еще не уничтожен, но при запуске команды для проверки состояния этого демона застрял, на выходе нет вывода. в то время как он должен показывать, что служба не запущена или команда не найдена, если ее правильно уничтожить.

Пожалуйста, помогите мне .. я новичок

1 Ответ

0 голосов
/ 26 октября 2019

Я пытался с помощью команды статуса сервисного имени.

Возможно, вы ошиблись.

После выполнения systemctl kill daemonname вы хотите присоединить GDBк процессу и посмотрите , где он застрял (используйте thread apply all where).

Вероятно, вы увидите, что ваши потоки заблокированы (например, поток T1 ожидает мьютекс A, который удерживается). потоком T2; поток T2 ожидает мьютекс B, удерживаемый потоком T1).

Я хочу отследить последний застревающий поток

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

Вместо этого вам следует подумать об инвариантах и ​​убедиться, что онине нарушаются.

...