web-dev-qa-db-ja.com

「gdbがコード署名されていることを確認してください-taskgated(8)を参照してください」-homebrewコードが署名されたgdbをインストールする方法

私はosx 10.8.4の下にあり、homebrewで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に戻した場合、/ usr/libexec/gdb/gdb-i386-Apple-darwinが期待どおりに実行されます。

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

どうも

ペレ

86
pellekrogholt

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

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

証明書の名前(gdb-certなど)を選択し、Identity Typeを自己署名ルートに設定し、Certificate TypeをCode Signingに設定し、Let me override defaultsを選択します。 [証明書の場所を指定]画面が表示されるまで[続行]を数回クリックし、[キーチェーン]を[システム]に設定します。

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

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

125
maximser

この方法でコード署名することなく、gdbをOSX 10.9で動作させました( here ):

  1. Macportsでgdbをインストールします。 (スキップすることもできます)

  2. Sudo nano /System/Library/LaunchDaemons/com.Apple.taskgated.plist

    オプション文字列を-sから-spに22行目、27桁目に変更します。

  3. コンピューターを再起動します。

  4. Gdbを使用します。 Macポートでインストールした場合は、「ggdb」コマンドを使用する必要があります。または、設定ファイルでエイリアスを作成しました:

エイリアスgdb = 'ggdb'

そして、「gdb」コマンドを使用します。

30
klm123

GDBでも同じ問題が発生しました。私はMac OS X 10.8.5別名Mountain Lionで実行しています。 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))"

ただし、このエラーメッセージは赤いニシンです。

私のために働いたことがわかった解決策は、スーパーユーザーacctを使用してGDBを単に呼び出すことでした:

Sudo gdb sample.out. 

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

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

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

24
mickster99

Sierra 10.12.6(およびそれ以降)およびHomebrewを使用している場合、/usr/local/bin/gdb/usr/local/Cellar/gdb/8.0/bin/gdb(または8.0.1などの任意のバージョン)へのシンボリックリンクです。

リンクとターゲットの両方にコード署名する必要があります。

codesign -fs gdb-cert /usr/local/bin/gdb
codesign -fs gdb-cert "/usr/local/Cellar/gdb/8.0/bin/gdb"

または、greadlinkbrew install coreutils経由でインストール)がある場合:

codesign -fs gdb-cert $(which gdb)
codesign -fs gdb-cert $(greadlink -f $(which gdb))
4
Larry Song

これはどれも私にとってはうまくいきませんでしたし、長い目で見なければなりませんでした。以下は、私がそれを機能させるために行ったステップの完全なリストです。

  1. Gdbに署名する証明書を作成します。

残念ながら、システム証明書は_Unknown Error = -2,147,414,007_を提供してくれました。これは非常に役立つため、回避策を講じなければなりませんでした。 _KeyChain Assistant -> Create certificate ->_

login、_gdb-cert_、_Code Signing_を選択

証明書をシステムキーチェーンにコピー/移動します(パスワードを入力します)

  1. 証明書を選択(_gdb-cert_)_Get info_-> _Trust Always_をクリックします
  2. _startup-with-Shell_を無効にします

コンソールに入力します:_set startup-with-Shell off_

構成を覚えておいてください:_echo "set startup-with-Shell off" >> ~/. gdbinit_

  1. ルートユーザーを有効にする

_System Preferences_-> _Users & Groups_-> _Unlock it_-> _Login Options_-> _Network Account Server_-> Join-> _Unlock it_に移動します-> Edit(メニュー)-> _Enable Root User_

  1. _Sudo killall taskgated_
  2. 最後にgdbに署名します

codesign -fs gdb-cert "$(which gdb)"

  1. ルートユーザーを無効にする(手順4)
  2. それでも動作しない場合は再起動します。 (他に何も機能しない場合、ほとんどの場合既に動作しています)

PS。私はlldbを使用することになります。それはただ機能するからです( tutorial

4
Taras Matsyk

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

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

この後、Sudo gdbを使用できました。 gdb w/o Sudoを使用する必要がある場合は、おそらく このリンクが役立ちます ただし、免責事項として、Sudoを使用することは今のところ大丈夫ですので、まだ試していません `。

2
JnBrymn

gdb 8.3にアップグレードしましたが、動作しませんでした。これは私を助けました:

codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb

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.allow-jit</key>
    <true/>
    <key>com.Apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.Apple.security.cs.allow-dyld-environment-variables</key>
    <true/>
    <key>com.Apple.security.cs.disable-library-validation</key>
    <true/>
    <key>com.Apple.security.cs.disable-executable-page-protection</key>
    <true/>
    <key>com.Apple.security.cs.debugger</key>
    <true/>
    <key>com.Apple.security.get-task-allow</key>
    <true/>
</dict>
</plist>

ここでこの解決策を見つけました: https://timnash.co.uk/getting-gdb-to-semi-reliably-work-on-mojave-macos/

注:資格がなければ、gdbでのみSudoを実行できました。

1

gdb 8.3;

私の問題は上記の人と同じで、

codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb
0
C.J

これは関連していない可能性があります。 macdbでは、gdbの代わりにlldbを使用できます。 gdbをインストールするのにこの面倒は必要ありません。

lldb( http://lldb.llvm.org )はHigh Sierraにデフォルトですでにインストールされています

0
Kaituo Li