Перенаправление ввода в GDB (MinGW)
Я пытаюсь заставить GDB запускать программы с перенаправлением ввода на стандартный ввод. Например, без gdb я бы запустил такую программу:
prog < input.txt
Теперь в GDB, обычный способ сделать это run < input.txt
, Тем не менее, это не работает для меня, и при этом ничего не перенаправляется в стандартный ввод.
Я использую Windows с MinGW. В чем может быть проблема?
3 ответа
Еще в конце 90-х сломанное перенаправление командной строки было известным и предполагаемым ограничением. Я подозреваю, что так и останется, поскольку mingw32
порт gdb
до сих пор радостно передает дословно все run
Аргументы (в том числе перенаправления) для дебютанта.
Несколько возможных обходных путей:
- если у вас есть возможность изменить интерфейс командной строки, а затем реализовать
bbadour
предложение - в противном случае, если вы можете легко приостановить процесс до точки, в которой вы хотите выполнить отладку, вызовите отладчика (с перенаправлением) из оболочки и подключите его, пока он уже запущен.
в противном случае, если у вас есть символы для заемщика (
gcc -g
) или вы знаете адресmain()
(gcc -Wl,-Map,mapfile
) и может установить точку останова, действуйте следующим образом (протестировано сmingw gdb 6.8.0
):# gdb debugee.exe (gdb) b main (gdb) run non-redirect-arguments-if-any (gdb) p dup2(open("/tmp/input.txt", 0), 0) (gdb) c
Здесь я столкнулся с той же проблемой, и у меня появилась привычка добавлять аргумент командной строки, чтобы можно было получать ввод из файла.
например, синтаксический анализ аргумента "-i ifile" с использованием argc и argv для получения входных данных из ifile вместо stdin и анализ "-o ofile" для записи выходных данных в ofile вместо stdout.
Тогда я просто использую эти аргументы вместо перенаправлений.
Инструменты, которые идут с MinGW, часто не являются последними версиями и часто опускаются.:: пожимает плечами::
Перенаправление ввода поддерживается начиная с GDB 8.0. Из файла NEWS:
Встроенная отладка в MS-Windows поддерживает перенаправление командной строки
Аргументы командной строки, используемые для запуска программ в MS-Windows, теперь могут включать символы перенаправления, поддерживаемые собственными оболочками Windows, такие как "<", ">", ">>", "2>&1" и т. Д. Это влияет на команды GDB такие как "run", "start" и "set args", а также соответствующие функции MI.