Сбой процесса в отладчике;как мне это убить - PullRequest
2 голосов
/ 26 февраля 2012

У меня есть приложение на C ++, которое подключается через последовательный порт USB к микропроцессору (аналог Arduino).Я использую termios.h в качестве серийного упаковщика.

Я отлаживаю с помощью cgdb в Mac OS X 10.7.3.

Когда я:

  • cgdb build/my-process
  • Установить некоторые точки останова и т. Д., Выполнить отладку
  • Найти ошибку или попытаться выйти все еще работает процесс с использованием kill внутри cgdb

процесс зависает.cgdb отказывается когда-либо убивать процесс - просто сидит там.Я довольно уверен, что это потому, что если я kill на полпути через приложение, я никогда не отпущу устройство /dev/ttyUSB, через которое я получаю доступ к микроконтроллеру.Я не уверен, что что-то заблокировано и никогда не разблокировано, но cgdb никогда не выходит.

Я пробовал:

  • Основные прерывания: Ctrl + C
  • ps aux | grep 'my-process', kill -9[PID] `.
  • ps aux | grep cgdb, kill -9 [pid].
  • sudo версий выше.

Ничто не убивает ни cgdb, ни запущенный в нем процесс.

Если я отсоединяю USB-кабель (разрываю соединение с микропроцессором), (я думал, что это может привести к сбою сбойного процесса), я начинаю видеть, что используется ~ 50% доступного процессора (не уверен, на каком), и все блокируетсявверх.Мне не не удается вывести приложение из строя.

Как вы: (a) чисто выходите без , блокируя все с cgdb или gdb в процессе отладки процесса, или (b) убить / убрать (хотя 'cleanly' будет просто обледенением на торте) остановите процесс, который остановлен, пока вы отлаживаете, что не не отвечает на kill -9 без перезагрузки?

Ответы [ 2 ]

5 голосов
/ 26 февраля 2012

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

Звучит как отладчик (или любой процесс, который ptrace использует другой), который застрял в ожидании ввода-вывода, не можетбыть убитым, либо.

0 голосов
/ 27 февраля 2012

ptrace или pgrep

Я бы попробовал "pgrep -l cgdb" очень удобно для перечисления pid ...

...