К сожалению, gdbserver
не поможет вам в этом случае (на данный момент). Он просто запускает программу, используя gdbserver
's tty, которая находится на удаленной машине. Это печально, потому что удаленный протокол GDB has extensions to manage this, но gdbserver
не реализует его (пока).
Значит, вам нужно самому управлять своей программой tty. Наиболее полным решением является использование socat
для создания «удаленного TTY» для вас и вашей программы.
На удаленной машине:
$ socat TCP-LISTEN:12345 EXEC:'<your program>',ptmx
Опция ptmx
позволяет использовать в качестве PTY межпроцессного коммуникационного механизма вместо socketpair
. Это даст вам более тонкое управление буферизацией с использованием настроек tty, непосредственно встроенных в CLI socat
(см. man socat
). В этом случае по умолчанию он просто буферизуется, пока символ новой строки не будет написан <your program>
.
С другой стороны, запустите:
$ socat - TCP:localhost:12345
И теперь у вас есть удаленный телетайп, кроме GDB-х.
Предполагается, что вы можете запустить socat
на своей цели и подключиться к нему через сеть TCP.
Если вы не можете, вы также можете использовать бесплатную последовательную линию, stty
ваших настройки и запустить программу против него с помощью переназначения оболочки:
$ stty -F /dev/ttyUSB0 raw 9600
$ exec command <> /dev/ttyUSB0 >&0 2>&1
Как объяснены в this answer.
В любом случае, вы обязательно должны обернуть свое решение, а gdbserver
имеет опцию --wrapper
, позволяющую вам сценарий, как программа запускается при использовании --multi
.
Обратите внимание, что при использовании многоуровневых решений для удаленного запуска socat
и автоматического присоединения к разветвленной программе, которую вы хотите отлаживать, сейчас слишком сложно объяснить и использовать.
Вы можете запустить свою программу, найти идентификатор процесса (например, xxxx) для программы. Откройте gdb с помощью «$ gdb -pid xxxx» или если gdb открыт »(gdb) attach xxxx». Возможно, вам сначала понадобится sudo gdb. Это работает лучше, если вы используете экран или tmux и т. Д. – InfinitelyManic