2017-10-05 55 views
0

所以我打算使用一個名爲ROS的框架爲新機器人編寫軟件。在ROS框架下,它將每個軟件組件作爲一個獨立的進程運行。此外,由於ROS旨在通過TCP信息共享一次在多臺機器上工作,因此我的設置將涉及多臺機器上的多個進程。GDB服務器 - 如何附加多臺機器上的多個進程?

現在我希望能夠運行gdb服務器並附加來自每臺機器的所有進程,以便在打到中斷點時暫停所有進程。

縱觀機制的文檔的GDB: https://sourceware.org/gdb/onlinedocs/gdb/Server.html

它詳細說明您可以通過命令附加多個進程gdb的服務器:

gdbserver的--attach通訊PID

然而,運行gdb服務器的機器,您將不會有其他機器上運行的進程的pid。你會如何將不同機器上的多個進程連接到同一臺gdb服務器上?如果這是不可能的,你將如何設置多個gdb服務器並讓它們彼此通信,以便一個掛起掛起其他人?

回答

2

目前無法完成--gdb一次只能連接到一個遠程目標。這方面的工作正在進行中;它被稱爲「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回答)是不可能的,這也是不可行 - 它不是人力所能一次調試超過2-3進程(你在這裏說話10S或進程),即使可能,您的進程(運行在不同的主機上)也不會全部停止「 - 會有一些延遲。只要有100毫秒或更長時間的延遲,您可以讓這些進程不停止運行,並且只在必要時手動停止並附加它們。最後,很多ROS進程可能會有定時器和斷言「自從上次定時器以來沒有太多時間已經過去了」等等。用GDB調試這樣的進程變得不可行:你停止它們一次,環顧四周,繼續他們立即斷言系統沒有按設計執行(和崩潰)。

相關問題