перенаправление ввода gdb с помощью cygwin

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

(gdb) run < input.txt

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

1 ответов


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

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

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

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

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