Tôi đang viết chương trình để triển khai thuật toán dòng chảy tối đa của Dinic qua mạng. Các mạng có thể được viết bằng tay hoặc được tải từ một tệp sử dụng chuyển hướng stdin. Tôi đã có thể sử dụng gdb để gỡ lỗi chương trình với các tệp nhỏ (khoảng 30 dòng), nhưng tôi gặp sự cố khi cố gắng gỡ lỗi chương trình với các tệp lớn hơn (> 1000 dòng). Mã bản thân là thế này:vấn đề gdb với chuyển hướng 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);
}
Nếu tôi chạy chương trình mà không cần gdb, nó chạy, không ok vì nó tạo ra một lỗi segmentation (đó là lý do tôi đang cố gắng để sử dụng gdb), nhưng nó đi qua phần này của "phân tích cú pháp" tệp đầu vào (và viết nó vào tệp gỡ lỗi đầu ra). Tuy nhiên, nếu tôi gõ:
gdb --args ./dinic --mode=NUM --verbose=LOW
(gdb) b 61
(gdb) run < tests/numterc.in
tôi nhận được:
(gdb) Program exited with 01 code.
và khi tôi mở file gỡ lỗi đó là khoảng 2000 dòng, khi đó phải có ít nhất 1000, đó là chiều dài tập tin đầu vào .
Tôi lặp lại, điều này xảy ra với các tệp "lớn", nó hoạt động chính xác với các tệp nhỏ. Câu hỏi đặt ra là, tôi thiếu một cái gì đó khi sử dụng gdb, hoặc là một lỗi gdb?
Lưu ý rằng điều này không làm việc với MinGW trên Windows, như được mô tả ở đây: http://stackoverflow.com/a/3652530/47984 (và theo kinh nghiệm của tôi với gdb 7.7.1 của MinGW vừa rồi). –