2017-10-05 16 views
0

私はROSというフレームワークを使って、新しいロボット用のソフトウェアを書くつもりです。 ROSフレームワークの下では、各ソフトウェアコンポーネントは別々のプロセスとして実行されます。さらに、ROSはTCPメッセージ共有を介して一度に複数のマシンで動作するように設計されているため、セットアップには複数のマシンで複数のプロセスが必要になります。GDB Server - 複数のマシンから複数のプロセスをどのようにアタッチしますか?

今や、私はブレークポイントに達したときにすべてのプロセスを中断できるように、gdbサーバーを実行して各マシンのすべてのプロセスをアタッチできるようにします。

GDB用documentionを見る: https://sourceware.org/gdb/onlinedocs/gdb/Server.html

それはあなたがコマンド経由のgdbサーバに複数のプロセスを添付することができますことを詳しく説明します。ただし、上の

gdbserverを--attach COMM PID

マシンがgdbサーバーを実行している場合、他のマシン上で実行されているプロセスのpidを取得することはできません。異なるマシンから複数のプロセスを同じgdbサーバーにアタッチする方法は?それが不可能な場合は、複数のgdbサーバーを設定してお互いに話をして、他のサーバーを一時停止するなどの方法はどうでしょうか?

答えて

2

これは現在実行できません。gdbは一度に1つのリモートターゲットにしか接続できません。この分野の仕事は進行中です。それは "multi target"プロジェクトと呼ばれています。そのwikiページはちょっと古いです。他の誰かが仕事を拾いましたが、ページを更新していません。

+0

最近、GNU Cauldronでこのことについて話がありました。スライド:https://gcc.gnu.org/wiki/cauldron2017?action=AttachFile&do=view&target=GDB+%26+Multi-target.pdf;ビデオ:https://slideslive.com/38902683/the-gdb-bof-gdb-multitarget –

1

今、私は私がブレークポイントにヒットしたときに、私はすべてのプロセスを中断できるように、GDBサーバを実行し、各マシンからすべてのプロセスを添付できるようにしたいです。

この(トムTromeyが答えとして)の不可能性に加えて

、それはまた、実行不可能だ - あなたがここ10Sまたはプロセスを話している(一度に複数の2-3のプロセスをデバッグするために人間的には不可能です)、それが可能であったとしても、あなたのプロセス(別々のホスト上で実行されている)がすべて「一度に」停止するわけではありません - いくつかの遅延があります。また、100ms以上の遅延が発生するとすぐに、これらのプロセスを停止せずに実行し、必要なときに手動で停止して接続することもできます。

最後に、ROSプロセスの多くは、「最後のタイマー以降に時間が過ぎていない」というタイマーとアサーションを持つ可能性が高くなります。GDBによるプロセスのデバッグは実行不可能になります。彼らは直ちにシステムが設計どおりに実行されていないと断言する(そしてクラッシュする)。

関連する問題