macでgdbを動かそうとしたらうまく行かなかったので試行錯誤した記録です。
実行環境 macOS Catalina ver-10.15.6
homebrewを使ってgdbをインストールし、githubから拡張のpedaもインストールしました。
いざ動かそうと思ったら
Unable to find Mach task port for process-id 923: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
という文字が。
gdbにコード署名をしないと使えないようです。
コード署名をする (参考ページhttps://sira.dev/2019/09/17/macos-gdb-codesign.html )
まず参考ページにある通りに自己署名証明書を作りました。
「最後に,作成した証明書を選択し,”When using this certificate” を “Always Trust” に変更する.」という部分がわからなかったのですが、(https://www.ssk.or.jp/seikyushiharai/rezept/iryokikan/download/index.files/tejunsyo_m.pdf )に書いてありました。
次にコード署名ですが
$ sudo codesign -fs gdb-cert $(which gdb)
で簡単にできました。
実はこれだけでは
During startup program terminated with signal ?, Unknown signal
と出て正常に動作しません。
そこで.gdbinitにset startup-with-shell offと書き込みます。
$ echo "set startup-with-shell off" >> ~/.gdbinit
.gdbinitはgdbの初期化スクリプトファイルで起動時に定型コマンドを自動で実行できるとのこと。
pedaをインストールすれば勝手にできていますし、なければホームディレクトリに作ればよいです。
これで、gdbが動くようになりました。(頭にsudoをつけないとコード署名されてない判定になって動きません。)
pedaを入れている場合はノーマルなgdbを起動するときに
$ sudo gdb --nx
と打つことになると思いますが、これは.gdbinitを無視することでpedaに切り替えないようにしています。
そのためgdbを起動したのち、
set startup-with-shell off
と打ち込まないと正常に動作しません。
まとめ
参考ページにはCatalinaではgdbは正常に動かない問題があるとのことでしたが、ちゃんと動きました。
結果的に解決しましたが、面倒臭かったので、ubuntuを使うのをお勧めします。