我目前正在关注如何使用这个C程序来处理程序集和gdb的video ,但是我遇到了一个问题。 下面是我编译和运行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
现在从最后input“demo”的地方开始,这就是程序应该接受用户input的地方。 但是当我input回车键后,没有任何反应。 我不能按ctrl + c退出程序,什么都不能做。 我最终不得不从另一个会话中终止进程,这样我就可以控制回来了。 任何想法,为什么GDB这样做,或者我可能做错了什么?
谢谢!
我不知道为什么这不适合你 它在这里按预期工作…
不过,我发现在单独的终端上运行执行交互式I / O的程序会更容易,也许会对您有所帮助。
在一个终端中,
$ gdbserver --multi localhost:4242 在港口4242听
另一方面,
$ gdb ./SimpleDemo (gdb) 目标扩展远程本地主机:4242 使用localhost:4242进行远程调试 (gdb) 运行10 20
回到运行gdbserver
的终端,
从主机127.0.0.1远程调试 进程./SimpleDemo创建; PID = PID 演示 演示 总和10 + 20 = 30 小孩退出状态0
你想在程序中输入用户名吗? 如果你只是想在开始时设置命令行参数,你可以说set args …你可以在程序的过程中给出参数。
你尝试过吗?
gdb --args ./SimpleDemo 10 20