Отладка приложения ncurses с помощью gdb

Я пытаюсь отладить мое приложение ncurses, используя gdb. Я использую команду tty для перенаправления ввода / вывода программы на другой терминал. Вывод работает как шарм, но у меня проблемы с вводом. Я использую функцию getch() для получения символов в моем приложении. Так, например, если я делаю в моей сессии GDB:

tty /dev/pts/5

Я получаю вывод в другой вкладке моего окна терминала (gnome-терминал). Мои сеансы GDB застревают, ожидая ввода, но когда я нажимаю любую клавишу в моем /dev/pts/5, я распечатываю ее, но само приложение не делает этого, кроме как символа ввода. При работе без GDB все работает нормально, я также использую noecho(), поэтому символы не должны отображаться. Так в чем проблема? Можно ли как-то обработать ввод с перенаправленного терминала?

2 ответа

Решение

Вы можете присоединиться к своему процессу для отладки с другого терминала, вместо того, чтобы пытаться запустить приложение изнутри gdb,

Запустите ваш процесс как обычно. Когда он заблокирован для пользовательского ввода, найдите его идентификатор процесса, а затем присоедините к нему с помощью gdb из другого окна:

gdb -p <PID>

Ваша проблема связана с тем, что программа по-прежнему ожидает, что ее интерактивный ввод поступит от вашего gdb сессия.

Может быть, уже поздно отвечать, но надеюсь, что это поможет: потребовалось некоторое время, чтобы выяснить, как отлаживать приложения ncurses, наконец, я сделал очень удобный способ с помощью gdbserver и tmux.

Таким образом, ввод-вывод GDB и приложения полностью разделены:

debug.sh (скрипт, который начинает отладку):

#!/bin/bash
tmux splitw -h -p 50 "gdbserver :12345 ./yourapplication"
tmux selectp -t 0
gdb -x debug.gdb

debug.gdb (однострочный файл сценария gdb для удобства):

target remote localhost:12345

Таким образом, приложение запускается с правой стороны, GDB слева ожидает продолжения или любой другой обычный GDB:)

Как только вы выйдете, tmux автоматически закроет gdbserver (следовательно, и правую панель) и все:)

Другие вопросы по тегам