Почему GDB зависает? - PullRequest
       31

Почему GDB зависает?

11 голосов
/ 24 января 2012

У меня есть приложение, которое я отлаживаю, и я пытаюсь понять, как работает GDB и почему я иногда не могу просмотреть приложение.Проблема, с которой я сталкиваюсь, заключается в том, что gdb зависает, и процесс, к которому он подключен, переходит в состояние перестал работать, когда я прохожу программу.После зависания gdb и необходимости его уничтожения, чтобы освободить терминал (ctrl-C не работает, я должен сделать это из другого окна терминала, получив идентификатор процесса для этого сеанса gdb и используя kill -9).

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

В случае, если это имеет значение, я использую g ++ 4.4.3, gdb 7.1, работающий на Ubuntu 10.04 x86_64.

Ответы [ 2 ]

4 голосов
/ 24 января 2012

Я бы сказал, что отлаженный процесс не будет бездействовать, если это будет причиной зависания.Каждый раз, когда GDB завершает шаг, он должен обновлять любые выражения, которые вам необходимо распечатать.Это может включать в себя следующие указатели и так далее, а в некоторых случаях может произойти сбой там (хотя я не напоминаю о реальном "зависании").Также обычно пытаются обновить трассировку стека.Если трассировка стека была повреждена и больше не является связной, она могла бы попасть в бесконечный цикл.Присоединение gdb к strace, чтобы увидеть, какие действия происходят во время зависания, может быть хорошим способом продвинуться на шаг вперед в выяснении проблемы.

(например, доступ к источникам через более неРаботающее монтирование NFS / SSHFS является одной из наиболее частых причин зависания GDB, здесь: P)

2 голосов
/ 07 сентября 2014

У меня была похожая проблема, и я решил ее, отправив сигнал CONT отлаживаемому процессу.

...