gdb беспокоятся с stdin перенаправлением

Я пишу программу для реализации алгоритма макс. потока Dinic по сети. Сети могут быть записаны или вручную или загружены из файла с помощью stdin перенаправление. Я смог использовать gdb для отладки программы с маленькими файлами (приблизительно 30 строк), но я испытываю затруднения, когда я пытаюсь отладить программу с большими файлами (> 1 000 строк). Сам код - это:

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.

и когда я открываю файл отладки, это - приблизительно 2 000 строк, когда это должно быть самое большее 1000, который является входной длиной файла.

Я повторяюсь, это происходит с "большими" файлами, это работает корректное с маленькими. Вопрос был бы, я пропускаю что-то при использовании gdb, или действительно ли это - gdb ошибка?

6
задан SleuthEye 18 April 2017 в 22:05
поделиться

1 ответ

Хорошо, я наконец-то смог найти обходной путь. Похоже, что опция --args не работает хорошо, по крайней мере, в моем случае. У меня gdb 6.8-debian и debian 5.0.4.

Что мне пришлось сделать, так это запустить gdb без опции --args:

$gdb ./dinic
(gdb) b 61
(gdb) run --mode=NUM --verbose=LOW < tests/numterc.in

и все заработало. Возможно, кому-то это будет полезно.

7
ответ дан 10 December 2019 в 00:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: