15

ncurses を使用して TUI を描画しています。問題は、プログラムがセグメンテーション フォールトを取得するたびに、端末が混乱したままになることです。何を入力しているのか見えません。私はsshで作業しているので、それは苦痛です。画面を使用することで、影響の一部を軽減しました。

端末が正常に動作し始めるように、ncurses でセグメンテーション違反の後に端末を更新するコマンドがあるかどうかを知りたいです。

4

5 に答える 5

27

指示、

stty sane

仕事をした。Enter が機能しない場合は、 を使用できます^J

stty sane ^J

CR/LF の解釈が壊れていることがあるので、^J明示的に使用してください。

于 2012-08-01T07:06:58.870 に答える
17

ncurses (任意の curses 実装) は、実行中に端末モードをrawおよびnoechoに設定し、アプリケーションがraw および norawecho および noecho関数を使用してこれらをシミュレートできるようにします。これは、これらのモードを切り替えるときの待機を避けるために、パフォーマンスのために行われます。

アプリケーションが を呼び出すとendwin、ncurses は端末モードを復元します。はるかに頻繁に使用されますが、これはreset_shell_modeに対しても実行できます。endwin

アプリケーションがクラッシュするか、 を使用して端末モードを復元せずに終了する場合endwin、最も明白な問題は、入力している内容が見えないことと、押しenterても機能しないことです。

SIGINTncurses は、ユーザーが開始したシグナル、をキャッチするためのシグナル ハンドラーを提供し、それらSIGTERMがキャッチされるとクリーンアップします。キャッチしようとしないのは、その時点でアプリケーションが死んでいて、それを復活させて修復しようとするのは逆効果だからです。SIGSEGV

stty saneを使用して端末モードを復元することを勧める人もいるかもしれません。それは「機能します」が、Unix プラットフォームでは、消去キーが予期しない値に設定されたままになる可能性があります。Linux および最新の BSD システムでは、たまたま期待どおりに動作します。

ただし、それを超えると、ncurses は正常にリセットされます

  • 色 (端末のデフォルトの色)
  • 線画(無効)
  • マウス プロトコル (無効にするため)

アプリケーションがこれらの機能のいずれかを使用する場合、resetコマンドは適切な選択です。通常、画面もクリアされます (おそらく、望んでいたものではありません)。そしてそれはより少ない文字を使用します:

resetcontrolJ
stty sanecontrolJ

参考文献:

于 2016-04-19T12:33:34.813 に答える
4

SIGSEGVを呼び出す などのシグナル ハンドラを記述しますendwin()

于 2012-08-01T07:10:58.903 に答える