122

私はosx 10.8.4の下にいて、自作でgdb 7.5.1をインストールしました(動機は、 --with-python などの新しい機能を備えた新しいgdbを取得します...)

簡単に言うと、C++ Eclipse プロジェクト内でデバッグを実行すると、次のようになります。

Error in final launch sequence
Failed to execute MI command:
-exec-run
Error message from debugger back end:
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

コード署名に関するさまざまな提案に従いました

だから私はした:

  1. 証明書を設定する
  2. gdb に署名します -> codesign -s gdb-cert /usr/local/bin/gdb

Eclipse でデバッグを再実行すると、「(gdb がコード署名されていることを確認してください - taskgated(8) を参照)」と同じエラーが表示されます。

gdb を (Eclipse の gdb 設定で) 古い gdb に戻すと、デバッグは期待どおりに実行されます。

解決策/ヒントはありますか?

どうも

ペレ

4

11 に答える 11

150

このエラーは、バイナリが他のプロセスの pid にアクセスするためにデジタル署名を必要とする pid アクセス ポリシーを OSX が実装しているために発生します。他のプロセスへの gdb アクセスを有効にするには、まずバイナリにコード署名する必要があります。この署名は、ユーザーが作成してシステムに登録する必要がある特定の証明書に依存します。

コード署名証明書を作成するには、キーチェーン アクセス アプリケーションを開きます。メニュー キーチェーン アクセス -> 証明書アシスタント -> 証明書の作成… を選択します。</p>

証明書の名前 (gdb-cert など) を選択し、ID の種類を自己署名ルートに設定し、証明書の種類をコード署名に設定して、デフォルトを上書きするを選択します。[証明書の場所の指定] 画面が表示されるまで [続行] を数回クリックし、[キーチェーン] を [システム] に設定します。

証明書をダブルクリックし、[信頼] セクションを開き、[コード署名] を [常に信頼する] に設定します。キーチェーン アクセス アプリケーションを終了します。

taskgated サービスを再起動し、バイナリに署名します。

$ sudo killall taskgated
$ codesign -fs gdb-cert "$(which gdb)"

ソースhttp://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/

macOS 10.12 (Sierra) 以降では、以下も行う必要があります

gdb 7.12.1 以降を使用する さらに、gdb がシェルを使用してデバッグ対象のプログラムを開始するのを防ぎます。これには、gdb 内で次のコマンドを使用できます。

set startup-with-shell off

この最後のコマンドをホーム ディレクトリの .gdbinit というファイルに入れることもできます。この場合、gdb を起動するたびに自動的に適用されます。

echo "set startup-with-shell off" >> ~/.gdbinit

ソース: https://sourceware.org/gdb/wiki/BuildingOnDarwin

于 2015-09-22T21:14:47.430 に答える
28

GDB でも同じ問題が発生しました。私はMac OS X 10.8.5別名マウンテンライオンの下で走っています。GDB版を使用してい7.7.1ます。

次のコマンドでテストプログラムをコンパイルしました。

g++ -o gdb-sample.out -g gdb-sample.cpp    

コマンドを入力するgdb sample.outと、同じ不可解なエラー メッセージが表示されます。

"Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8))"

ただし、このエラー メッセージは厄介者です。

私が見つけた解決策は、スーパーユーザー アカウントを使用して GDB を呼び出すだけでした。

sudo gdb sample.out. 

それは私にとってはうまくいきます。

そして、その時点から、sudo を使用せずに GDB example.out を実行できました。

これが他の人に役立ち、うまくいくことを願っています。そうでない場合は、RSVP。

于 2015-01-18T00:05:50.307 に答える
3

ここで最も投票された回答のグローバルな変化が、意図しない結果をもたらすのではないかと思います.

taskgated は古い Tiger 規則を有効にするのではなく、署名されたコードの実行を許可します。したがって、こちらの回答と同様に、gdb の署名付き証明書を取得する方がよい場合があります。

この後、sudogdbを使用できるようになりました。sudo なしで gdb を使用する必要がある場合は、おそらくこのリンクが役立ちますが、免責事項sudoです。

于 2014-12-26T19:29:21.993 に答える