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

最後に「デモ」と入力したところから、プログラムはユーザー入力を受け入れるはずです。しかし、Enter キーを押した後に Return キーを押しても、何も起こりません。ctrl+c でプログラムから抜け出せず、何もできません。制御を取り戻すために、別のセッションからプロセスを強制終了する必要があります。gdb がこれを行っている理由、または私が間違っている可能性がある理由はありますか?

ありがとう!

4

4 に答える 4

2

なぜそれがうまくいかないのかわかりません。ここでは期待どおりに機能します...

それでも、別の端末でインタラクティブI / Oを実行するプログラムを実行する方が簡単であり、おそらくそれが役立つでしょう。

1つのターミナルで、

$ gdbserver --multi localhost:4242
ポート4242でリッスンしています

そして別の、

$ 
gdb ./SimpleDemo(gdb)target extended-remote 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

これを試しましたか?

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

プログラム中にユーザー入力を取得しようとしていますか? 最初にコマンド ライン引数を設定したいだけの場合は、 set args ... と言うだけで、プログラムの進行中に行うように引数を指定できます。

于 2012-06-18T19:02:15.953 に答える
0

キーの代わりにCtrl+を使用します。EnterEnter

于 2021-07-12T09:46:26.620 に答える