Mac OS Xでの標準デバッガはlldbになりましたが、GDBを使いたいこともあるかと思います。
そのような場合、HomebrewやMacPortsでインストールすることができます。が、最近のOS Xではそのまま起動しようとすると以下の様なエラーが出て、実行できない場合があります。
(gdb) run
Starting program: /Users/maki/tmp/a.out
Unable to find Mach task port for process-id 910: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
これはメッセージの通り、gdbコマンドがcodesignされていないのが原因です。GDBにコード署名する必要があります。
コード署名の仕方
証明書の作成
まず、「キーチェーンアクセス」を開きます。
$open -a "Keychain Access.app"
「キーチェーンアクセス」メニューの「証明書アシスタント」から「証明書を作成...」を選択します。
名前を適当につけ(ここではgdb-certにしています)、「自己署名ルート」「コード署名」を選択し、「デフォルトを無効化」にチェックを入れます。
「続ける」ボタンを押すと警告が出ますが、そのまま進みます。
そのまま「続ける」を押して進めます。拡張鍵用途選択領域では「コード署名」にチェックを入れます。
証明書の場所を指定では「システム」を選択します。
これでコード署名用の自己署名証明書が作られます。「完了」ボタンを押します。
証明書の信頼設定の変更
さらに、作成された証明書をダブルクリックで開いて、「信頼」を開き、コード署名のところを「常に信頼」にします。
taskgatedの再起動
ここで証明書を閉じて、キーチェーンアクセスを終了します。そして、taskgatedをいったん終了させて、再起動させます。
GDBへのコード署名
最後に、GDBにコード署名します。MacPortsのGDBはggdbになっているのに注意。
$ sudo codesign -s gdb-cert /opt/local/bin/ggdb
Homebrewなら、
$ sudo codesign -s gdb-cert /usr/local/bin/gdb
になるはずです。
これで、OS XでもGDBが使えるようになります。