Как запустить gdb remote + telnet ?
Я хочу отладить программу на удалённой машине, соответственно, захожу через telnet и вызываю заглушку gdb (сам gdb там поставить возможности нет). Если вводить пакеты вручную, то всё работает: например, если ввести '$m0,10#2a' (на экране это не отображается), то ко мне возвращается ответ '+$E03#a8' :-).
Однако я хочу использовать gdb, для этого запускаю его в tty1, telnet - в tty2, после чего ввожу в gdb следующее:
(gdb) set debug remote 1
(gdb) target remote /dev/tty2
Remote debugging using /dev/tty2
Sending packet: $Hc-1#09...Sending packet: $Hc-1#09...Sending packet: $Hc-1#09...Sending packet: $Hc-1#09...
Timed out.
Timed out.
Timed out.
Ignoring packet error, continuing...
Sending packet: $qC#b4...Sending packet: $qC#b4...Sending packet: $qC#b4...Sending packet: $qC#b4...
Timed out.
Timed out.
Timed out.
Ignoring packet error, continuing...
Sending packet: $qOffsets#4b...Sending packet: $qOffsets#4b...Sending packet: $qOffsets#4b...Sending packet: $qOffsets#4b...
Timed out.
Timed out.
Timed out.
Ignoring packet error, continuing...
Couldn't establish connection to remote target
Malformed response to offset query, timeout
(gdb)
При этом в tty2 появляется следующее:
+$Hc-1#09$Hc-1#09$Hc-1#09$Hc-1#09---+$qC#b4$qC#b4$qC#b4$qC#b4---+$qOffsets#4b$qO ffsets#4b$qOffsets#4b$qOffsets#4b---+
Т.е. всё наоборот - запросы видны, ответов нет.
Путём нехитрых тестов выяснилось, что gdb использует ввод tty2 в качестве ввода, а вывод в качестве вывода. Т.е. я вижу, что он отправляет, и могу набирать ему ответы: скажем, если я ввожу в tty2 ( без telnet) '--+$c#63$c#64' :), то gdb выдаёт следующее:
(gdb) target remote /dev/tty2
Remote debugging using /dev/tty2
Sending packet: $Hc-1#09...Nak
Sending packet: $Hc-1#09...Ack
Timed out.
Sending packet: $Hc-1#09...putpkt: Junk:
Ack
Packet received: c
Packet instead of Ack, ignoring it
Bad checksum, sentsum 0x64, csum 0x63, buf=c
А мне, собственно, нужно наоборот - чтобы gdb выводил свои пакеты на вход tty2, а ответы брал с вывода tty2.
Может, кто знает, как это сделать?