12

gdb を使用して ncurses アプリケーションをデバッグしようとしています。ttyコマンドを使用して、プログラムの I/O を別の端末にリダイレクトします。出力は魅力的に機能しますが、入力に問題があります。アプリでシンボルを取得するために getch() 関数を使用しています。たとえば、gdb セッションで次のようにすると、

tty /dev/pts/5

ターミナル ウィンドウ (gnome-terminal) の別のタブに出力が表示されます。gdb セッションがスタックして入力を待機していますが、/dev/pts/5 内の任意のキーを押すと出力されますが、アプリ自体はそれを入力記号として除外しません。gdb なしで実行すると、すべて正常に動作します。また、noecho() も使用しているため、シンボルは表示されません。だから問題は何ですか?リダイレクトされた端末からの入力を何とか処理することは可能ですか?

4

2 に答える 2

17

内からアプリケーションを実行しようとする代わりに、プロセスにアタッチして、別のターミナルからデバッグできますgdb

プロセスを通常どおり実行します。ユーザー入力がブロックされたら、そのプロセス ID を見つけてgdb、別のウィンドウからアタッチします。

gdb -p <PID>

あなたの問題は、プログラムがインタラクティブな入力がgdbセッションから来ることをまだ期待しているためです。

于 2012-08-15T07:17:20.867 に答える