当前位置:  开发笔记 > 运维 > 正文

gdb与stdin重定向有关

如何解决《gdb与stdin重定向有关》经验,为你挑选了1个好方法。

我正在编写一个程序来通过网络实现Dinic的max-flow算法.网络可以手动编写,也可以使用stdin重定向从文件加载.我已经能够使用gdb用小文件(大约30行)调试程序,但是当我尝试使用更大的文件(> 1000行)调试程序时遇到了麻烦.代码本身是这样的:

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错误?



1> Leandro Dema..:

好的,我终于可以解决了.看来--args选项效果不好,至少在我的情况下如此.我有gdb 6.8-debian和debian 5.0.4.

我不得不做的是在没有--args选项的情况下运行gdb:

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

它运作良好.也许有人会觉得这很有用.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有