我正在編寫一個程序,通過網絡實現Dinic的最大流算法。網絡可以通過手動編寫,也可以使用標準輸入重定向從文件加載。 我已經能夠使用gdb使用小文件(大約30行)來調試程序,但是當我嘗試用更大的文件(> 1000行)調試程序時遇到了問題。代碼本身是這樣的:gdb與標準輸入重定向的問題
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);
}
如果我沒有運行GDB的程序,它運行時,也不行,因爲它產生分段錯誤(這是我想要使用GDB的原因),但它通過這部分「解析」輸入文件(並將其寫入輸出調試文件)。 不過,如果我輸入:
gdb --args ./dinic --mode=NUM --verbose=LOW
(gdb) b 61
(gdb) run < tests/numterc.in
我得到:
(gdb) Program exited with 01 code.
,當我打開調試文件,它是關於2000線,當它應該最多是1000,這是輸入文件長度。
我再說一遍,這發生在「大」文件中,它適用於小文件。 問題是,我在使用gdb的時候丟失了什麼,或者這是一個gdb的bug?
請注意,這不符合MinGW的工作時,在Windows上,如下所述:http://stackoverflow.com/a/3652530/47984(和我剛剛使用MinGW的gdb 7.7.1一樣)。 – 2014-08-21 15:06:50