Sto scrivendo un programma per implementare l'algoritmo Maxic Flow di Dinic su una rete. Le reti possono essere scritte a mano o caricate da un file utilizzando il reindirizzamento stdin. Sono stato in grado di usare gdb per eseguire il debug del programma con file di piccole dimensioni (circa 30 righe), ma ho problemi quando provo a eseguire il debug del programma con file più grandi (> 1000 righe). Il codice stesso è questo:problemi con gdb stdin reindirizzamento
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);
}
Se faccio funzionare il programma senza gdb, si corre, non ok in quanto genera un errore di segmentazione (che è la ragione per cui sto cercando di utilizzare gdb), ma passa attraverso questa parte di "analizzare" il file di input (e scriverlo nel file di debug di output). Tuttavia, se di tipo I:
gdb --args ./dinic --mode=NUM --verbose=LOW
(gdb) b 61
(gdb) run < tests/numterc.in
ottengo:
(gdb) Program exited with 01 code.
e quando ho aperto il file di debug E 'di circa 2000 righe, quando dovrebbe essere al massimo di 1000, che è la lunghezza del file di input .
Ripeto, questo succede con i file "grandi", funziona correttamente con quelli piccoli. La domanda sarebbe: manco qualcosa quando uso gdb, o si tratta di un bug gdb?
Si noti che questo non funziona con MinGW su Windows, come descritto qui: http://stackoverflow.com/a/3652530/47984 (e come già sperimentato da me con gdb 7.7.1 di MinGW proprio ora). –