macOS MojavaにインストールしたEclipseでC/C++のデバッグをしようとするとハングしてしまう現象に悩まされました。gdbに署名すれば解消するという情報をよく見かけるのですが、Mojavaだとなぜかうまくいかず。
しかしようやく動くようになったので、備忘録として記録に残しておきます。元になった情報はこちらです。
前提環境
macOS Mojave
Eclipse 2019-03
やったこと
Step1: 証明書の作成
ターミナルからキーチェーンAppを起動します。
open -a "Keychain Access.app"
キーチェーンアクセス > 証明書アシスタント > 証明書の作成… を選択します。
「自己証明書を作成しようとしています。」にはそのまま「続けます」を押します。
証明書情報のシリアル番号と有効期間(日数)はそのままにして「続ける」を押します。
同様に次の画面でも情報を変更せず、そのまま「続ける」を押していきます。
- 証明書情報
- 鍵ペア情報
- 鍵用途拡張領域
拡張鍵用途拡張領域では、「コード署名」チェックボックスにチェックが入っていることを確認して、「続ける」を押します。
次の画面では何も情報を変更せず、そのまま「続ける」を押します。
- 基本制約拡張領域
- サブジェクト代替名拡張領域
「証明書の場所を指定」ではキーチェーンで「システム」を選んで、「作成」を押します。
パスワードを聞かれるので入力します。これで証明書が作成されました。「完了」を押します。※スクリーンショットを後から採取したため証明書の名称が「gdb-cert2」となっていますが「gdb-cert」で読み替えてください。
キーチェーンアクセスのメイン画面の左側にある「キーチェーン」領域で「システム」を選びます。右のペインに先ほど作成した証明書「gdb-cert」があるのでダブルクリックで開きます。上の方にある「信頼」をクリックすると証明書による信頼先の選択が可能になります。この中から「コード署名」を「常に信頼」を選んで、画面を閉じます。
ここでシステムを再起動します。
Step2: gdbのインストールと署名
まずgdbをインストールします。
$ brew install gdb
次に.gdbinit
ファイルを作成します。
$ echo "set startup-with-shell off" >> ~/.gdbinit
gdbにコード署名します。ここがMojava以前のコード署名のやり方と異なる部分です。まず以下の内容でgdb.xml
というファイルを作成しておきます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.debugger</key>
<true/>
</dict>
</plist>
このファイルを使ってgdbにコード署名します。
$ codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb
これを実行するとログインアカウントのパスワードの入力を求められるので入力します。
これで完了です。
コメント