LINUX.ORG.RU

xterm + gdb


0

1

Привет, Пытаюсь подключиться к stdin stdout gdb запущенного в xterm'e. Сообщения в поток stdin отправляются(и даже это сообщение появляется в окне xterm) но сама команда gdb не обрабатывается и в stdout ничего не появляется(в окно xterm тоже ничего не выводится) Могли бы подсказать как правильно можно подключиться к stdin stdout xterm'а? Если такое возможно.

Просто для примера:

Terminal 1:

$ mkfifo gdbin
$ xterm -e bash -c "gdb <gdbin > tmpout" &
[1] 7358
$ cat > gdbin
print 2+2
print/t 5

Terminal 2:

$ tail -f tmpout
Copyright (C) 2010 Free Software Foundation, Inc.
License ...
(gdb) Hangup detected on fd 0
error detected on stdin
tail: tmpout: file truncated
GNU gdb (GDB) ...
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) $1 = 4
(gdb) $2 = 101
(gdb) 

io ★★
()
Ответ на: комментарий от io

Спасибо за пример, он работает

Но при:

$ xterm -e bash -c "gdb <gdbin > tmpout" ./test
$ echo "run" > gdbin

Происходит не правильный вывод и gdb с xterm закрываются

Содержание tmpout:

GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>.
(gdb) Starting program:  
(gdb) quit

Что делаю не так?

Antonavt
() автор топика
Ответ на: комментарий от Antonavt

Правильный вывод заработал вот так:

$ xterm -e bash -c "gdb <gdbin > tmpout ./test"
$ echo "run" > gdbin

Но gdb закрывается после выполнения первой команды...:(

Как быть?

Antonavt
() автор топика
Ответ на: комментарий от Antonavt

как только echo закрывает pipe на другом конце gdb получает отлуп, я именно поэтому и использовал cat. Если есть такое бурное желание использовать echo, то ничто не мешает добавить процесс, который будет держать pipe открытым. Например:

$ xterm -e bash -c "gdb <gdbin >tmpout 2>&1 ./test" &
$ sleep 100000  > gdbin &
[2] 15609
$ echo print 5*3 > gdbin
$ echo print 5*3 > gdbin
$ echo print 5*3 > gdbin
$ echo print 5-3 > gdbin

Имеем на другом конце:

...
(gdb) $1 = 15
(gdb) $2 = 15
(gdb) $3 = 15
(gdb) $4 = 2

Но если планируется что-то крутое, то м.б. лучше expect? Можно посмотреть в источниках gdb примеры тестов.

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