STDIOがリモートで接続できるように、端末で実行したいプログラムをどのように実行しますか?
具体的には、1つのホストでgdbを起動し、そのターミナルインターフェースにリモートで接続し、CTRL + Cを使用して実行を一時停止し、レイアウト(たとえばlayout regs
)を変更できるようにします。下の画像は、私が達成したいことを示しています。
これまでに私が得た最も近い方法は、次のようにsocat
ptyを作成し、リモートホストでgdbを起動することです。
$ socat PTY,link=$HOME/somedev,rawer, SYSTEM:"gdb 2>&1",pty
その後、このPTYはnetcatリスナーとパイプに接続されます。
$ cat ~/somedev | nc -l 5556 > ~/somedev
ワークステーションでnetcatを起動します。
$ nc <remote_host> 5556
私が今持っているのは私が望むものと似ていますが、ターミナルインタラクションは少し不安定です(例えば、gdbのレイアウトを変更すると最初は大丈夫に見えますが、新しい行がウィンドウの整列を乱すように見えます)。 CTRL + Cは、プロセスを中断するためにgdbプロセスに渡されません。
私はこの動作のいくつかがnetcatの制限によるものかもしれないことを認めています。リモートホストのtcpリスナーに接続している他のプログラムで開いています。
ソリューションの他の制限事項:
- gdbプロセスは確立されたリモート接続から独立して起動する必要があります(つまり、図に示すようにsocatを使用してgdbプロセスを開始することはできません
socat TCP-LISTEN:5556,reuseaddr,fork EXEC:"gdb"
)。これにより、リモートホストではなくワークステーションでgdbを実行することに関連するソリューションも削除されます。 - ワークステーション端末にCtrl + Cを入力すると、
SIGINT
gdbプロセスに転送する必要があります。
答え1
リモートホストに接続するための標準ソリューションは次のとおりです。SSHあなたの質問には、これらの可能性を排除するものはありません。端末転送はSSHに組み込まれている機能です。
gdbプロセスは、リモート接続設定とは別に開始する必要があります。
これを行うには画面またはマルチプレクサ会議。次に、SSHを使用してセッションに接続します。
Netcatはデータのみを渡します。端末のインターフェースは、端末を介して交換されるデータ以上で構成される。処理も必要です。I/W制御そうしないと、アプリケーションが端末サイズを照会できるようになり、入力変換(Ctrl+CSIGINT信号に変換など)などの特定の機能が機能しなくなります。ソキャットはできます。あなたが間違っていない場合は、SSHを使用する方がはるかに簡単になります。