Estoy escribiendo un programa para implementar el algoritmo de flujo máximo de Dinic en una red. Las redes pueden escribirse a mano o cargarse desde un archivo usando stdin redirection. He podido usar gdb para depurar el programa con archivos pequeños (alrededor de 30 líneas), pero estoy teniendo problemas cuando trato de depurar el programa con archivos más grandes (> 1000 líneas). El código en sí mismo es la siguiente:problema de gdb con la redirección stdin
uint32_t read_lines = 0;
while(!feof(stdin))
{
err = fscanf(stdin, "%u %u %u\n", &n1, &n2, &c);
if (err != 3)
{
printf("read_lines=%u\n", read_lines); /*for debugging purposes*/
}
read_lines += 1;
/* write to debug file */
fprintf(debug, "line %u: %u %u %u\n", read_lines, n1, n2, c);
}
Si corro el programa sin GDB, se ejecuta, no bien, ya que genera un fallo de segmentación (que es la razón por la que estoy tratando de utilizar GDB), y sale a través esta parte de "analizar" el archivo de entrada (y escribirlo en el archivo de depuración de salida). Sin embargo, si escribo:
gdb --args ./dinic --mode=NUM --verbose=LOW
(gdb) b 61
(gdb) run < tests/numterc.in
me sale:
(gdb) Program exited with 01 code.
y cuando abro el archivo de depuración que es alrededor de 2000 líneas, cuando debería ser como máximo 1000, que es la longitud del archivo de entrada .
Repito, esto sucede con los archivos "grandes", funciona correctamente con los pequeños. La pregunta sería, ¿me estoy perdiendo algo cuando uso gdb, o es esto un error gdb?
Tenga en cuenta que esto no funciona con MinGW en Windows, como se describe aquí: http://stackoverflow.com/a/3652530/47984 (y como lo experimenté con el gdb 7.7.1 de MinGW). –