OS XでGDBを使う(ためにコード署名をする)

  • 115
    Like
  • 5
    Comment
More than 1 year has passed since last update.

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が使えるようになります。

参考