minimalist for gdb mingw

for - Redireccionamiento de entrada en gdb(MinGW)



mingw minimalist gnu for windows (3)

Estoy intentando que gdb ejecute programas con redirección de entrada a stdin. Por ejemplo, sin gdb ejecutaría un programa como este:

prog < input.txt

Ahora en gdb, la forma habitual de hacerlo es run < input.txt . Sin embargo, no funciona para mí y al hacer esto, nada se redirige a stdin.

Estoy usando Windows con MinGW. ¿Cual podría ser el problema?


Desde finales de los 90, la redirección de la línea de comando interrumpida era una limitación conocida y supuesta . Mi sospecha es que sigue siendo así, ya que el puerto mingw32 de gdb aún pasa alegremente todos los argumentos de run (incluidos los redireccionamientos) al depurador.

Varias soluciones posibles:

  1. Si tiene la opción de alterar la interfaz de la línea de comando, entonces implemente la sugerencia de bbadour
  2. de lo contrario, si puede suspender fácilmente el proceso antes del punto en el que desea realizar la depuración, invoque al depurador (con redirección) desde un shell y adjúntelo mientras ya se está ejecutando
  3. de lo contrario, si tiene símbolos para el debugee ( gcc -g ) o si conoce la dirección de main() ( gcc -Wl,-Map,mapfile ) y puede establecer un punto de interrupción allí, proceda de la siguiente manera (probado con 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


La redirección de entrada es compatible a partir de GDB 8.0. Desde el archivo de NOTICIAS:

  • La depuración nativa en MS-Windows admite la redirección de la línea de comandos

    Los argumentos de la línea de comandos utilizados para iniciar programas en MS-Windows ahora pueden incluir símbolos de redirección compatibles con shells nativos de Windows, como ''<'', ''>'', ''>>'', ''2> & 1'', etc. Esto afecta los comandos GDB como "ejecutar", "iniciar" y "establecer argumentos", así como las características de MI correspondientes.


Me encontré con el mismo problema aquí, y me acostumbré a agregar un argumento en la línea de comandos para permitir la captura de información de un archivo.

por ejemplo, analizando un argumento "-i ifile" usando argc y argv para obtener información de ifile en lugar de stdin y analizando "-o ofile" para escribir salida en ofile en lugar de stdout.

Entonces solo uso esos argumentos en lugar de redirecciones.

Las herramientas que vienen con MinGW a menudo no son las últimas versiones y con frecuencia se omiten las funciones. ::encogimiento de hombros::