Подтвердить что ты не робот

Перенаправление ввода gdb с использованием cygwin

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

(gdb) run < input.txt

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

4b9b3361

Ответ 1

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

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

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

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

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