私は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))
コード署名に関するさまざまな提案に従いました
だから私はやった:
Eclipseでデバッグを再実行すると、上記と同じエラーが発生します(「gdbがコード署名されていることを確認してください-taskgated(8)を参照)」。
Gdbを(Eclipseのgdb設定で)古いgdbに戻した場合、/ usr/libexec/gdb/gdb-i386-Apple-darwinが期待どおりに実行されます。
そこに解決策/ヒントはありますか?
どうも
ペレ
このエラーは、バイナリが他のプロセス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
この方法でコード署名することなく、gdbをOSX 10.9で動作させました( here ):
Macportsでgdbをインストールします。 (スキップすることもできます)
Sudo nano /System/Library/LaunchDaemons/com.Apple.taskgated.plist
オプション文字列を-s
から-sp
に22行目、27桁目に変更します。
コンピューターを再起動します。
Gdbを使用します。 Macポートでインストールした場合は、「ggdb」コマンドを使用する必要があります。または、設定ファイルでエイリアスを作成しました:
エイリアスgdb = 'ggdb'
そして、「gdb」コマンドを使用します。
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。
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"
または、greadlink
(brew install coreutils
経由でインストール)がある場合:
codesign -fs gdb-cert $(which gdb)
codesign -fs gdb-cert $(greadlink -f $(which gdb))
これはどれも私にとってはうまくいきませんでしたし、長い目で見なければなりませんでした。以下は、私がそれを機能させるために行ったステップの完全なリストです。
残念ながら、システム証明書は_Unknown Error = -2,147,414,007
_を提供してくれました。これは非常に役立つため、回避策を講じなければなりませんでした。 _KeyChain Assistant -> Create certificate ->
_
login
、_gdb-cert
_、_Code Signing
_を選択
証明書をシステムキーチェーンにコピー/移動します(パスワードを入力します)
gdb-cert
_)_Get info
_-> _Trust Always
_をクリックしますstartup-with-Shell
_を無効にしますコンソールに入力します:_set startup-with-Shell off
_
構成を覚えておいてください:_echo "set startup-with-Shell off" >> ~/. gdbinit
_
_System Preferences
_-> _Users & Groups
_-> _Unlock it
_-> _Login Options
_-> _Network Account Server
_-> Join
-> _Unlock it
_に移動します-> Edit
(メニュー)-> _Enable Root User
_
Sudo killall taskgated
_codesign -fs gdb-cert "$(which gdb)"
PS。私はlldb
を使用することになります。それはただ機能するからです( tutorial )
ここで最高の回答が得られた のグローバルな変化が、意図しない結果をもたらすのではないかと思います。
古いTiger規約を有効にするのではなく、taskgatedは署名されたコードの実行を許可します。 answer here と同様に、gdbの署名付き証明書を取得する方がよい場合があります。
この後、Sudo
gdbを使用できました。 gdb w/o Sudoを使用する必要がある場合は、おそらく このリンクが役立ちます ただし、免責事項として、Sudo
を使用することは今のところ大丈夫ですので、まだ試していません `。
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
を実行できました。
gdb 8.3;
私の問題は上記の人と同じで、
codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb
これは関連していない可能性があります。 macdbでは、gdbの代わりにlldbを使用できます。 gdbをインストールするのにこの面倒は必要ありません。
lldb( http://lldb.llvm.org )はHigh Sierraにデフォルトですでにインストールされています