перенаправление ввода GDB с использованием Cygwin - PullRequest
12 голосов
/ 27 января 2012

Кажется, что перенаправление ввода в gdb не работает в Cygwin, например,

(gdb) run < input.txt

Есть ли другой способ перенаправить ввод в GDB Cygwin ??

1 Ответ

12 голосов
/ 11 мая 2012

К сожалению, это невозможно при запуске GDB в Cygwin. ошибка существует уже давно, но, по-видимому, ее трудно исправить - и, вероятно, разработчики gdb предпочитают тратить время на функции / проблемы, относящиеся к более распространенным средам (таким как Linux).

Существуют различные возможные обходные пути;Я бы предпочел первый, так как он самый чистый и полезный, хотя и не отлаживается / не запускается в cygwin:

  • Добавить аргумент командной строки, например, -f whatever с whatever в качестве имени файла для чтенияот.Если аргумент отсутствует или установлен на -, читайте из стандартного ввода.Опция -f - необязательна, конечно, но для аргументов, принимающих имена файлов, это общий стандарт (если это имеет смысл) для обработки - как «use stdin / out».
  • ИспользуйтеGDB взломал здесь , чтобы переназначить STDIN в файл, открываемый вручную внутри приложения:

    > gdb yourexecutable
    (gdb) break main
    (gdb) run
    (gdb) call dup2(open("input.txt", 0), 0)
    (gdb) continue
    

    Это устанавливает точку останова для функции main, затем выполняет программу, которая будет прерываться правильнопосле ввода main.Затем dup2 используется для замены стандартного ввода (0) файловым дескриптором входного файла.

...