LINUX.ORG.RU

Как запустить gdb remote + telnet ?


0

0

Я хочу отладить программу на удалённой машине, соответственно, захожу через 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.

Может, кто знает, как это сделать?

Ответ на: комментарий от anonymous

На удалённой машине стоит не Unix-подобная система, так что gdbserver там не поставить. Так что единственный вариант - через telnet и уже имеющуюся gdb-заглушку (исходников программы тоже нет).
Вообще-то у меня была идея взять ещё tty3 и перенаправить вывод tty3 на ввод tty2, а вывод tty2 - на ввод tty3, после чего вызвать 'target remote /dev/tty3'. По идее, тогда всё должно заработать, но я не знаю, как осуществить такое перенаправление. И к тому же, это как то слишком хитро - мне кажется, должно быть решение проще. :)

Впрочем, если кто-нибудь знает, как осуществить такое перенаправление, я бы и этот вариант попробовал.

Carpenter
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.