J'écris un programme pour implémenter l'algorithme de flux maximum de Dinic sur un réseau. Les réseaux peuvent être écrits à la main ou chargés à partir d'un fichier en utilisant la redirection stdin. J'ai été capable d'utiliser gdb pour déboguer le programme avec de petits fichiers (environ 30 lignes), mais j'ai des problèmes quand j'essaie de déboguer le programme avec des fichiers plus gros (> 1000 lignes). Le code lui-même est la suivante:Problème gdb avec la redirection 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 je lance le programme sans gdb, il fonctionne, pas correct car il génère une erreur de segmentation (ce qui est la raison pour laquelle je suis en train d'utiliser gdb), mais il passe par cette partie de "l'analyse" du fichier d'entrée (et l'écriture dans le fichier de débogage de sortie). Cependant, si je tape:
gdb --args ./dinic --mode=NUM --verbose=LOW
(gdb) b 61
(gdb) run < tests/numterc.in
je reçois:
(gdb) Program exited with 01 code.
et quand j'ouvre le fichier de débogage, il est de 2000 lignes, alors qu'il devrait être au plus 1000, qui est la longueur du fichier d'entrée . Je répète, cela se produit avec de "gros" fichiers, cela fonctionne correctement avec les petits fichiers. La question serait, ai-je manqué quelque chose lors de l'utilisation de gdb, ou est-ce un bug de gdb?
Notez que cela ne fonctionne pas avec MinGW sur Windows, comme décrit ici: http://stackoverflow.com/a/3652530/47984 (et comme expérimenté par moi avec gdb 7.7.1 de MinGW juste maintenant). –