現在、gdb
を使用したアプリケーションのリモートデバッグの問題で立ち往生しています。リモートプロセスに接続してIDE
のビジュアルデバッグを使用する機能(私はVisual Studio Code
を使用します)。
問題は、IDEがpid
によってローカルプロセスに接続できることです。これはあまり役に立ちません。したがって、ローカルポート転送を要求した場合、ローカルポートを使用して接続を転送できますが、これも実際には必要ありません。
「pid-forwarding」のようなことを実行できますか?つまり、pid
これは実際にはリモートプロセスです。
コメント
- あなた' IDEが使用しているものを教えていない(そして私は' IDEを使用していないので、おそらく'あなたを助けることができます)。ただし、gdbserverを調べる必要があります。'組み込み/制限されたシステムで実行できる小さなプログラムであり、'より強力なマシンからのファットデバッガ'。
- @UncleBilly私はそうしました。 " Visual Studio Code "を使用しています。残念ながら、リモートデバッグをサポートしていないことが文書化されています…
- @UncleBilly gdbserver は、私が望んでいたもののようです。ありがとう。
回答
ビリーおじさんによると、これを行う良い方法は、GDBのリモートデバッグ機能を使用することです。これは、デバッグするプロセスを実行しているホストで「小さな」デバッガーを実行し、開発環境を実行しているホストからgdb
を使用してそれに接続することで機能します。多くのIDE(VS Codeを含む)はgdb
を使用したデバッグをサポートしているため、他のプラットフォームを含むどこでも実行されるプロセスを対象とした開発環境の快適さを得ることができます。
デバッグするプロセスを実行しているホストで、gdbserver
をインストールして(多くの場合、静的バイナリをコピーして)実行する必要があります。例:
gdbserver --attach :9953 ${pid}
はポート9953にリストされ、指定されたプロセスIDにアタッチされます。サーバーに接続するさまざまな方法(シリアルポート、IPアドレスなど)を指定し、コマンドを実行してデバッグするか、実行中のプロセスに接続するか、特定のプロセスなしで「デバッグサーバー」を実行することもできます。 。
開発環境のあるホストで、gdb
内のターゲットに接続します:
$ gdb ... (gdb) target remote <IP address>:9953
その他はすべて通常どおり機能します。 gdb
は、必要なファイル(ライブラリなど)をリモートターゲットから転送しますが、処理速度を上げるために、ファイルのローカルコピーを指定できます。ローカルソースを使用します。
これは、2つのホストが同じ場合に期待どおりに機能しますが、異なるホストで機能するようにすることもできます。たとえば、デバッグ用に LinuxシステムのWindowsプログラム、またはより一般的には、より大きな開発プラットフォームの小さな組み込みシステムで実行されるプログラム。