5

我目前正在关注这个关于如何使用这个 C 程序使用程序集和 gdb 的视频,但我遇到了一个问题。这是我编译和运行 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

现在,我在最后输入了“演示”,这就是程序应该接受用户输入的地方。但是当我在输入回车后按回车时,什么也没有发生。我不能ctrl+c退出程序,什么也做不了。我最终不得不从另一个会话中终止该进程,这样我才能重新获得控制权。任何想法为什么 gdb 会这样做,或者我可能做错了什么?

谢谢!

4

4 回答 4

2

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

不过,我发现在单独的终端中运行执行交互式 I/O 的程序更容易,也许它会对您有所帮助。

在一个终端中,

$ gdbserver --multi localhost:4242
监听 4242 端口

在另一个中,

$ gdb ./SimpleDemo 
(gdb)目标扩展远程 localhost:4242
使用 localhost:4242 进行远程调试
(gdb)运行 10 20

回到终端运行gdbserver

从主机 127.0.0.1 远程调试
处理 ./SimpleDemo 创建;pid= PID
演示
演示
10+20 之和 = 30

孩子以状态 0 退出
于 2012-07-14T06:37:40.267 回答
0

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

于 2012-06-18T19:02:15.953 回答
0

你试过这个吗?

gdb --args ./SimpleDemo 10 20
于 2012-06-18T20:55:17.770 回答
0

使用Ctrl+Enter代替Enter键。

于 2021-07-12T09:46:26.620 回答