gdb不接受用户输入

时间:2012-06-18 18:56:44

标签: c linux assembly gdb

我目前正在关注如何使用this video处理程序集和gdb的this C program,但我遇到了问题。这是我编译和运行gdb所做的工作:

chiggins@host:~/assem$ gcc -ggdb -o SimpleDemo SimpleDemo.c
chiggins@host:~/assem$ gdb ./SimpleDemo
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/chiggins/assem/SimpleDemo...done.
(gdb) list
4       int add(int x, int y)
5       {
6               int z =10;
7
8               z = x + y;
9               return z;
10      }
11
12      main(int argc, char **argv)
13      {
(gdb)
14              int a = atoi(argv[1]);
15              int b = atoi(argv[2]);
16              int c;
17              char buffer[100];
18
19              gets(buffer);
20              puts(buffer);
21
22              c = add(a,b);
23
(gdb)
24              printf("Sum of %d+%d = %d\n",a, b, c);
25
26              exit(0);
27
28      }
(gdb) run 10 20
Starting program: /home/chiggins/assem/SimpleDemo 10 20
demo

现在从最后输入“demo”的地方开始,这就是程序应该接受用户输入的地方。但是当我在输入后按回车键时,没有任何反应。我无法ctrl + c退出程序,无能为力。我最终不得不从另一个会话中删除该进程,以便我可以控制回来。任何想法为什么gdb这样做,或者我可能做错了什么?

谢谢!

4 个答案:

答案 0 :(得分:1)

我不确定为什么这对你不起作用;它按预期工作......

尽管如此,我发现在单独的终端中运行执行交互式I / O的程序更容易,也许它会帮助你。

在一个终端,

$ gdbserver --multi localhost:4242
listening on port 4242

在另一个,

$ gdb ./SimpleDemo
(gdb) target extended-remote localhost:4242
Remote debugging using localhost:4242
(gdb) run 10 20

返回运行gdbserver

的终端
Remote debugging from host 127.0.0.1
Process ./SimpleDemo created; pid=PID
demo
demo
Sum of 10+20 = 30

Child exited with status 0

答案 1 :(得分:0)

您是否尝试在程序中输入用户?如果你只想在开头设置命令行参数,你可以说set args ...你可以像在程序过程中那样给出参数。

答案 2 :(得分:0)

你试过这个吗?

gdb --args ./SimpleDemo 10 20

答案 3 :(得分:0)

使用 Ctrl+Enter 而不是 Enter 键。