相关疑难解决方法(0)

如何加载程序读取stdin并在gdb中获取参数?

我有一个程序从stdin获取输入,并从命令行获取一些参数.它看起来像这样:

cat input.txt > myprogram -path "/home/user/work"
Run Code Online (Sandbox Code Playgroud)

我尝试使用gcs在emacs中调试代码,通过Mx gdb,我尝试使用以下命令加载程序:

gdb cat input.txt > myprogram -path "/home/user/work"
Run Code Online (Sandbox Code Playgroud)

但是,gdb不喜欢它.

问题来自这里.不幸的是我不理解解决方案,并且不确定除了使用该-g选项进行编译并运行命令Mx gdb 之外还要做什么.

emacs redirect gdb command-line-arguments

95
推荐指数
4
解决办法
6万
查看次数

在C或C++代码中以编程方式为Linux上的gdb设置断点

如何以编程方式在C或C++代码中设置断点,这对于Linux上的gdb有效?

即:

int main(int argc, char** argv)
{
    /* set breakpoint here! */
    int a = 3;
    a++;  /*  In gdb> print a;  expect result to be 3 */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c c++ linux gdb

93
推荐指数
5
解决办法
7万
查看次数

使用cygwin的gdb输入重定向

似乎gdb中的输入重定向在Cygwin中不起作用,例如

(gdb) run < input.txt
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以在Cygwin的gdb中重定向输入?

cygwin gdb

12
推荐指数
1
解决办法
1948
查看次数

gdb与stdin重定向有关

我正在编写一个程序来通过网络实现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);
}
Run Code Online (Sandbox Code Playgroud)

如果我运行没有gdb的程序,它运行,不好,因为它生成一个分段错误(这是我试图使用gdb的原因),但它通过这部分"解析"输入文件(并写入它进入输出调试文件).但是,如果我输入:

gdb --args ./dinic --mode=NUM --verbose=LOW
(gdb) b 61
(gdb) run < tests/numterc.in
Run Code Online (Sandbox Code Playgroud)

我明白了:

(gdb) Program exited with 01 code.
Run Code Online (Sandbox Code Playgroud)

当我打开调试文件时,它大约是2000行,当它应该是最多1000行,这是输入文件的长度.

我再说一遍,这种情况发生在"大"文件中,它适用于小文件.问题是,我在使用gdb时遗漏了什么,或者这是一个gdb错误?

c redirect stdin gdb

6
推荐指数
1
解决办法
9852
查看次数

标签 统计

gdb ×4

c ×2

redirect ×2

c++ ×1

command-line-arguments ×1

cygwin ×1

emacs ×1

linux ×1

stdin ×1