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
でよい。