К сожалению, это невозможно при запуске 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
) файловым дескриптором входного файла.