GDB - отображать вывод целевого приложения в отдельном окне - PullRequest
14 голосов
/ 22 января 2012

Я использую GDB для отладки некоторых своих приложений на Си.Сейчас я загружаю целевое приложение, устанавливаю точку останова в строке 30 и запускаю ее.

Я бы хотел, чтобы GDB отображал вывод моего собственного приложения в новом окне терминала, пока я все еще могууправлять обработкой точки останова через окно терминала GDB, но я не могу найти правильный переключатель.Есть ли способ заставить GDB отображать вывод моей программы в собственном окне?

Ответы [ 6 ]

17 голосов
/ 04 августа 2015

Для тех, кто интересуется, как использовать команду GDB tty, вот краткое описание ...

  • Открыть новое окно консоли. Мы перенаправим вывод из программы, работающей под GDB здесь. Это наше окно вывода.
  • Запустите команду tty в окне вывода. Это покажет имя tty, используемого базовой консолью.

    $ tty
    /dev/pts/4

  • Откройте другое окно консоли и запустите GDB здесь. Давайте назовем это окном GDB.

  • Теперь запустите команду tty в GDB, используя полученное выше имя файла tty, а затем запустите процесс отладки.

    (gdb) tty /dev/pts/4
    (gdb) run

Теперь вы должны видеть вывод программы отдельно в окне вывода.

Примечание. Команда GDB set new-console on не работает в Linux! Он предназначен для запуска только на окнах. Используйте метод tty, описанный выше в Linux.

15 голосов
/ 09 марта 2013

Вы можете использовать set new-console on для выполнения этого, как показано здесь .

7 голосов
/ 09 марта 2013

Еще один способ сделать это - запустить целевую программу с помощью gdbserver (при условии, что она доступна вам). Затем вы можете подключить запущенную GDB в отдельном окне к gdbserver.

Документация по GNU gdbserver

Из окна A:

gdbserver :12345 myprog [args...]

Из окна B:

gdb test
GNU gdb 6.6
...
(gdb) target remote localhost:12345
Remote debugging using localhost:12345
0x009867c0 in ?? ()
(gdb) b main
Breakpoint 1 at 0x804834a: file test.c, line 40.
(gdb) c
Continuing.

Breakpoint 1, main (argc=1, argv=0xffff8904) at test.c:40
40          int i = 1;
(gdb) 
2 голосов
/ 24 декабря 2013

Просто используйте команду tty. Если вы хотите, чтобы вывод вашей программы перенаправлялся в / dev / pts / 5, введите:

tty /dev/pts/5
1 голос
/ 04 февраля 2017

При использовании lldb на Mac, программа запускается в новом окне терминала, а отладчик управляет из исходного окна:

$ lldb   <prog>
(lldb) b main   # if you want to set a breakpoint
(lldb) process launch --tty -- <args>

Программа запускается как процесс в указанном tty (окно терминала):

$ tty   # (in other window, get tty name)
/dev/ttys002

$ lldb  
(lldb) b main   # if you want to set a breakpoint
(lldb) process launch --tty=/dev/ttys002 -- <args>
1 голос
/ 22 января 2012

Лучший способ, который я знаю, - перенаправить вывод программы в файл, а затем tail -f этот файл в другом терминале.Перенаправление выполняется с run > filename, как описано в документации GDB .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...