LINUX.ORG.RU

как подключить 2й tty к gdb?

 ,


0

1

в gdb есть команды tty device, new-ui interpreter device

как ими правильно пользоваться?

в терминале 1 я запускаю gdb
в терминале 2 я запускаю tty, получаю /dev/pts/2
в gdb ввожу tty /dev/pts/2
при запуске отлаживаемой программы (run) я в терминале 2 получаю warning: GDB: Failed to set controlling terminal: Операция не позволена
вывод отлаживаемой программы идёт в терминал 2 но вводимые символы в терминале 2 идут не в отлаживаемую программу а в bash терминала 2
чяднт?

может существуют какие-нибудь полнодуплексные именованные каналы?
может какой-нибудь netcat как-нибудь в терминале 2 можно запустить?
пробовал в настройках профиля в Konsole в поле «Команда» оставить значение пустым - он пишет Предупреждение: Невозможно найти «», вместо этого будет запущена программа «/bin/bash». Проверьте параметры своего профиля. и всё равно запускает bash

Ну и ради праздного интереса: а как это реализовано в gdb? Как на си написать программку, которая сама будет подключаться к заданному второму терминалу и работать в нём например как echo (и например дублировать всё в основной терминал)?


Как на си написать программку, которая сама будет подключаться к заданному второму терминалу

  1. Открыть зад.втор.терм.
  2. Писать на зад.втор.терм.
  3. Читать с зад.втор.терм.
  4. Управлять и настраивать зад.втор.терм.
algo
()
Ответ на: комментарий от algo

вы мыслите на уровне топовых ЛЛМ

но к сожалению это бесполезно, пока непонятно, как это вообще запускать

FeelUs
() автор топика

Ввод-вывод можно организовать через bash, например, < /dev/pts/0 > /dev/pts/1 2> /dev/pts/3 app значит запуск app где ввод будет браться из терминала 0, ошибки будут выводиться будет в терминал 3, а другое будет выводится в терминал 1

tnray
()

Второму терминалу нужно уснуть.

Терминал 2:

# tty
/dev/pts/2
# sleep 1d

Терминал 1:

gdb program
tty /dev/pts/2
run

после этого вввод-вывод программы будет доступен в терминале 2

anonymous
()

Как на си написать программку, которая сама будет подключаться к заданному второму терминалу

Сначала надо отключиться от текущего терминала:

fd = open(/dev/tty)
ioctl(fd,TIOCNOTTY)
close(fd)

или, если ты вызывал setsid() недавно, ты и так отключён.

Затем открываешь новый (тем же open). В линуксе открыть новый достаточно чтобы он стал controlling, в фрибсд нужно ещё явно привязать его через ioctl TIOCSCTTY.

Новооткрытый терминал dup2-аешь на fd0, fd1, fd2, исходный дескриптор (если он не 0, 1 или 2) можно закрыть.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от anonymous

так просто оказалось…

я ещё такой способ нашёл: выполнить такой скрипт:

#!/bin/bash
reset
tty
tail -f /dev/null
FeelUs
() автор топика
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария