Перенаправление ввода в GDB (MinGW)

Я пытаюсь заставить GDB запускать программы с перенаправлением ввода на стандартный ввод. Например, без gdb я бы запустил такую ​​программу:

prog < input.txt

Теперь в GDB, обычный способ сделать это run < input.txt, Тем не менее, это не работает для меня, и при этом ничего не перенаправляется в стандартный ввод.

Я использую Windows с MinGW. В чем может быть проблема?

3 ответа

Еще в конце 90-х сломанное перенаправление командной строки было известным и предполагаемым ограничением. Я подозреваю, что так и останется, поскольку mingw32 порт gdb до сих пор радостно передает дословно все run Аргументы (в том числе перенаправления) для дебютанта.

Несколько возможных обходных путей:

  1. если у вас есть возможность изменить интерфейс командной строки, а затем реализовать bbadourпредложение
  2. в противном случае, если вы можете легко приостановить процесс до точки, в которой вы хотите выполнить отладку, вызовите отладчика (с перенаправлением) из оболочки и подключите его, пока он уже запущен.
  3. в противном случае, если у вас есть символы для заемщика (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.

Другие вопросы по тегам