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

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

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

prog < input.txt

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

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

4b9b3361

Ответ 1

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

Несколько возможных обходных решений:

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

Ответ 2

Здесь я столкнулся с той же проблемой, и я просто привык добавлять аргумент командной строки, чтобы разрешить захват ввода из файла.

например. Разбор аргумента "-i ifile" с использованием argc и argv для ввода ввода из ifile вместо stdin и синтаксического анализа "-o deile" для записи вывода в opile вместо stdout.

Затем я просто использую эти аргументы вместо перенаправления.

Инструменты, поставляемые с MinGW, часто не являются последними версиями и часто имеют функции, опущенные.:: пожимают плечами::