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:
- Si tiene la opción de alterar la interfaz de la línea de comando, entonces implemente la sugerencia de
bbadour
- 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
de lo contrario, si tiene símbolos para el debugee (
gcc -g
) o si conoce la dirección demain()
(gcc -Wl,-Map,mapfile
) y puede establecer un punto de interrupción allí, proceda de la siguiente manera (probado conmingw 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::