2010-08-23 20 views
18

Estoy intentando que gdb ejecute programas con la redirección de entrada a stdin. Por ejemplo, sin GDB correría un programa como este:Redirección de entrada en gdb (MinGW)

prog < input.txt 

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

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

Respuesta

2

Me encontré con el mismo problema aquí, y acabo de adquirir el hábito de agregar un argumento de línea de comandos para permitir la captura de entrada de un archivo.

p. Ej. Analizar un argumento "-i ifile" usando argc y argv para obtener entrada de ifile en lugar de stdin y analizar un "-o ofile" para escribir salida en ofile en lugar de stdout.

Luego uso esos argumentos en lugar de redireccionamientos.

Las herramientas que vienen con MinGW a menudo no son las últimas versiones y con frecuencia tienen características omitidas. :: encogimiento de hombros ::

12

Ya en la década de los 90, la redirección de línea de comando rota era known and assumed limitation. Mi sospecha es que sigue siendo así, ya que el puerto mingw32 de gdb todavía transmite alegremente todos los argumentos run (incluidos los redireccionamientos) al debugee.

varias soluciones posibles:

  1. si usted tiene la opción de modificar la interfaz de línea de comandos, a continuación, poner en práctica la sugerencia bbadour 's
  2. de otro modo, si se puede suspender fácilmente el proceso antes de que el punto que desee depurar a, invocar la depurando un programa (con cambio de dirección) de una concha y se adhieren a ella, mientras que ya se está ejecutando
  3. de otro modo, si usted tiene símbolos para la depurando un programa (gcc -g) o conoce la dirección de main() (gcc -Wl,-Map,mapfile) y puede establecer un punto de interrupción allí, proceder 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 
    
+0

estoy corriendo en el mismo problema que la OP. Sin embargo, no puedo obtener la tercera solución que funcione para mí. Esto está en 'gdb 7.5.50'. ¿Cómo funciona la segunda solución? ¿Cómo se asegura de que cuando se inicia el depurador, no se complete por completo antes de que tenga la oportunidad de adjuntar gdb? – greatwolf

Cuestiones relacionadas