これは古い質問ですが、どの解決策もうまくいかなかったようです(私はMojaveを使用していました)。lldbに変換することは、問題の解決策ではありません。それは単なる回避策です。
このソリューションには、コード署名のわずかに変更されたバージョンが含まれます。基本的に、主な違いは、証明書に署名するときに、コード署名時に資格XMLファイルを渡す必要があることです。以下では、最初から最後までのすべてのステップについて、ソースウェアWebサイトのコンテンツをコピーして貼り付けました。
1.1。システムキーチェーンに証明書を作成します
キーチェーンアクセスアプリケーションを起動します(/ Applications / Utilities / Keychain Access.app)
メニュー項目/キーチェーンアクセス/証明書アシスタント/証明書の作成...を開きます。
名前(例ではgdb-cert)を選択し、[IDタイプ]を[自己署名ルート]に設定し、[証明書タイプ]を[コード署名]に設定して、[デフォルトを上書きする]を選択します。[証明書の場所の指定]画面が表示されるまで[続行]を数回クリックし、[キーチェーン]を[システム]に設定します。
証明書をシステムキーチェーンに保存できない場合は、代わりにログインキーチェーンに証明書を作成してからエクスポートします。次に、それをシステムキーチェーンにインポートできます。
最後に、キーチェーンアクセスアプリケーションを終了して、証明書ストアを更新します。
コントロール:ターミナルタイプで
security find-certificate -c gdb-cert
これにより、新しく作成された証明書に関する詳細が表示されます。
キーチェーン: "/ Library / Keychains / System.keychain"バージョン:256クラス:0x80001000属性: "alis" = "gdb-cert" [...]
示されているように、keychain:がシステムキーチェーンであることを確認してください。
また、証明書の有効期限がまだ切れていないことを確認してください。
security find-certificate -p -c gdb-cert | openssl x509 -checkend 0
X509データ構造全体を検査する場合は、次のように入力できます。
security find-certificate -p -c gdb-cert |openssl x509 -noout -text
1.2。コード署名用の証明書を信頼する
キーチェーンアクセスを再開します。証明書のコンテキストメニューを使用して、[情報を見る]を選択し、[信頼]アイテムを開き、[コード署名]を[常に信頼する]に設定します。
最後に、キーチェーンアクセスアプリケーションをもう一度終了して、証明書ストアを更新します。
コントロール:ターミナルタイプで
security dump-trust-settings -d
これにより、gdb-cert証明書(おそらくとりわけ)と、コード署名を含むその信頼設定が表示されます。
1.3。gdbバイナリに署名して資格を与える
(Mac OS X 10.14以降)以下を含むgdb-entitlement.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-certとして知られている場合は、次を使用します。
codesign --entitlements gdb-entitlement.xml -fs gdb-cert $(which gdb)
またはMojave(10.14)の前、ちょうど
codesign -fs gdb-cert $(which gdb)
gdbバイナリが通常のユーザーが書き込みできない場所にある場合は、このコマンドの前にsudoを付ける必要がある場合があります。
gdbを頻繁にビルドする場合は、-enable-codesign = gdb-cert(gdb-certが証明書の名前であると想定)を渡して構成することで、この手順を自動化できます。
コントロール:ターミナルタイプで
codesign -vv $(which gdb)
また、10.14(Mojave)以降については、資格も確認してください。
codesign -d --entitlements - $(which gdb)
1.4。システムの証明書とコード署名データを更新します
最も信頼できる方法は、システムを再起動することです。
より侵襲性の低い方法は、現在実行中のtaskgatedプロセスを強制終了してtaskgatedサービスを再開することです(プロセスの任意の時点で、gdbを再度実行する前までに):
sudo killall taskgated
ただし、タスクゲートされたサービスは、強制終了後に正常に再起動しない場合があるため、たとえばps $(pgrep -f taskgated)をチェックして、このステップの後でサービスが有効であることを確認してください。または、上記のように、システムを再起動します。