1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

ssh接続先のros2 launchでGDBを使う方法

Last updated at Posted at 2024-01-26

Answer

手順1. デバッグ向けにビルド

・コマンドラインで指定する方法
ビルド時に、colcon build に、下記オプションを付ける。

--cmake-args -DCMAKE_BUILD_TYPE=Debug

・CMakeLists.txtで指定する方法
CMakeLists.txtに下記の1行を追加する。

add_compile_options(-g)

手順2. 実行ファイル実行コマンドにprefixを付ける

ローンチファイルで、Node()またはLifecycleNode()の引数に

prefix='xterm -e gdb -ex "break main" -ex run --args'

を加える。

以上。

 
以上でおしまい。
ローンチすると新規ウィンドウでGDBプロンプトが開き、mainの直前でブレークしてくれる。

背景

ros2 launchでは、GDBプロンプトが使えなさそう。
私はFoxyで使えませんでした。
参考リンク

もう少し調べると、抜け道を発見した記事を見つけました。
その記事ではWSLで成功したことを報告していますが、
私はWSL2だけでなく、ネイティブのLinuxマシンでも成功することを確認しました。

ros2 run でGDBを使いたい場合

参考:https://zenn.dev/shotaak/articles/e03f4c85497395

手順としては、ビルド時にコンパイルオプションを付けるところまでは同じ(本記事の上部に記載)。

そして、ros2 runするときに、

ros2 run --prefix 'xterm -e gdb -ex "break main" -ex run --args' <パッケージ名> <実行ファイル名>

つまり、ローンチファイルの Node() のオプションで prefix='...' と書いたのは、ros2 run の prefixを設定していたということなんですね。

ssh接続していない場合

リモート環境ではない場合、xtermを使う必要が無い。
単に xterm -e が不要となって、prefix は gdb -ex "break main" -ex run --args でよい。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?