Как войти в процесс, работающий на GDB?

376
solti

Поэтому я пытался отладить программу, которая работает на двух узлах. Я использую Yod в качестве панели запуска задач.

 yod -hosts node01,node02 ./dist_task -nl 2 

Программа зависла. Поэтому я хотел использовать GDB, как это

 yod -hosts node01,node02 gdb ./dist_task 

Я в сеансе GDB в node01, но для node02 я не могу. Что происходит, я вижу процесс, запущенный (gdb ./dist_task) на удаленном узле (node02 от htop), но я не могу войти в него. Я пытался сделать присоединение (я просто пытаюсь присоединиться к процессу GDB), как обычно, как мы это делаем с процессом, но в моем случае, так как это уже GDB, я получаю информацию о GDB, но не о процессе.

PS: я пытался сделать через Xterm, но там тоже не повезло (я не могу выскочить два Xterm)

0
Вы привязали к процессу "strace"? Кстати, "ожидание" не означает "застрял" ott-- 8 лет назад 1
но таким образом я мог только видеть системный вызов ... Я действительно хотел сделать gdb: p .. да, вы правы в ожидании / застрял, думаю, я исправлю это. solti 8 лет назад 0
Другой вариант может быть `ltrace`, проверьте, поддерживает ли ваша система это. ott-- 8 лет назад 0
хм у меня есть трассировка .. Я мог бы попробовать это тогда solti 8 лет назад 0

1 ответ на вопрос

0
ssnobody

Вы злоупотребляете attach

Из документов:

attach process-id This command attaches to a running process—one that was started outside gdb 

Вы можете попробовать запустить их, а yod -hosts node01,node02 ./dist_task -nl 2затем подключить к ним с помощью attachкоманды из приглашения GDB или используяgdb -a <pid>

Я сделал это, и это не работает .. так как к тому времени, когда я иду и делаю приложение, программа уже запущена ... Я хотел сделать GDB с самого начала программы solti 8 лет назад 0
Тогда вы можете захотеть заглянуть в gdbserver. В качестве альтернативы, отправьте SIGINT процессу сразу же после его запуска, чтобы он не продолжал выполняться, и у GDB есть что-то для подключения. ssnobody 8 лет назад 0

Похожие вопросы