Перенаправление ввода в GDB (MinGW) - PullRequest
20 голосов
/ 23 августа 2010

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

prog < input.txt

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

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

Ответы [ 3 ]

13 голосов
/ 06 сентября 2010

Еще в конце 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
    
2 голосов
/ 31 августа 2010

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

например, анализ аргумента "-i ifile" с использованием argcи argv для получения ввода из ifile вместо stdin и анализа "-o ofile" для записи выходных данных в ofile вместо stdout.

Затем я просто использую эти аргументы вместо перенаправлений.Инструменты, которые идут с MinGW, часто не являются последними версиями и часто опускаются.:: пожимает плечами ::

0 голосов
/ 30 июня 2018

Перенаправление ввода поддерживается начиная с GDB 8.0.Из файла NEWS:

  • Собственная отладка в MS-Windows поддерживает перенаправление командной строки

    Теперь аргументы командной строки, используемые для запуска программ в MS-Windows, могут включать перенаправлениесимволы, поддерживаемые собственными оболочками Windows, такие как «<», «>», «>>», «2> & 1» и т. д. Это влияет на команды GDB, такие как «run», «start» и «set args»,а также соответствующие функции MI.

...