web-dev-qa-db-ja.com

gdbが「プロセスIDのMachタスクポートが見つかりません」エラーで失敗する

私のアプリは正常に動作しますが、gdbは次のエラーでデバッグに失敗します

(gdb) run
Starting program: /path/to/app 
Unable to find Mach task port for process-id 83767: (os/kern) failure (0x5).

OS X Lionを使用しています。 GDBバージョンは

$ gdb --version
GNU gdb 6.3.50-20050815 (Apple version gdb-1752) (Sat Jan 28 03:02:46 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-Apple-darwin".
123
S B

Snow Leopard以降のMac OSバージョンでは、gdb実行可能ファイルをコード署名するだけでは不十分です。

動作させるには、このガイドに従う必要があります。 http://www.opensource.Apple.com/source/lldb/lldb-69/docs/code-signing.txt

このガイドではlldbに対して行う方法を説明していますが、プロセスはgdbに対してもまったく同じです。

56
Tyilo

Sudo gdb executableFileNameに変更すると機能します! :)

119
Mengyuan

証明書を作成し、gdbに署名する必要があります。

  • アプリケーション「Keychain Access」を開きます(/ Applications/Utilities/Keychain Access.app)
  • メニューを開く/キーチェーンアクセス/証明書アシスタント/証明書の作成...
  • 名前(例ではgdb-cert)を選択し、「Identity Type」を「Self Signed Root」に設定し、「Certificate Type」を「Code Signing」に設定し、「Let me override defaults」を選択します。 「続行」をクリックします。事前定義された365日間を3650日間に延長することもできます。
  • 「証明書の場所を指定」画面が表示されるまで「続行」を数回クリックし、「システムにキーチェーン」を設定します。
  • 「システム」キーチェーンに証明書を保存できない場合は、「ログイン」キーチェーンに証明書を作成してエクスポートします。その後、それを「システム」キーチェーンにインポートできます。
  • キーチェーンで「システム」を選択すると、新しい証明書が見つかります。証明書のコンテキストメニューを使用して、[情報を取得]を選択し、[信頼]項目を開き、[コード署名]を[常に信頼]に設定します。
  • 証明書を使用し、現在実行中の「taskgated」プロセスを強制終了して「taskgated」サービスを再起動するには、「Keychain Access」アプリケーションを終了する必要があります。または、コンピューターを再起動することもできます。
  • 最後に、gdbに署名できます。

    Sudo codesign -s gdb-cert /usr/local/bin/ggdb

    Sudo ggdb ./myprog

30
qed

問題は、rootユーザーとしてログインしていないことです(これは望ましくありません)。アクセスを許可するには、gdbの証明書を作成する必要があります。このチュートリアルに従ってください、あなたは行くのが良いはずです...

http://sourceware.org/gdb/wiki/BuildingOnDarwin

他のすべてが失敗した場合は、次を使用します:Sudo gdb executableFileName

14
Sam Ruberti

このリンク このエラーをなくすための最も明確で詳細なステップバイステップの手順がありました。

私の場合、キーを「システム」キーとして使用する必要がありました。そうしないと、機能しませんでした(すべてのURLが言及しているわけではありません)。

また、taskgatedを強制終了することは、再起動する代わりに実行可能な(より高速な)代替手段です。

また、このプロセスを開始し、brew uninstall gdbを使用して現在のgdbをアンインストールする前に、 アンインストールされたMacPorts を使用しました。

6
Hans Roggeman

El Capitanで機能させるには、このコマンドが必要でした。

Sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer
2
Aris

これが本当に便利です guide これは私の問題を解決しました(OSX 10.13.6)。

  1. キーチェーンアクセスを開く
  2. メニューで、[キーチェーンアクセス]> [証明書アシスタント]> [証明書の作成]を開きます。
  3. 名前を付けます(例:gdbc)
    • IDタイプ:自己署名ルート
    • 証明書の種類:コード署名
    • チェック:デフォルトを上書きさせてください
  4. 「...の場所を指定してください」というプロンプトが表示されるまで続行します。
  5. キーチェーンの場所をシステムに設定します
  6. 証明書を作成してアシスタントを閉じます。
  7. システムキーチェーンで証明書を見つけ、右クリックして情報を取得します(またはダブルクリックします)。
  8. 信頼を展開し、コード署名を常に信頼に設定します
  9. ターミナルでtaskgatedを再起動します:killall taskgated
  10. ターミナルでcodesign -fs gdbc /usr/local/bin/gdbを実行します:これはrootパスワードを要求します
1
liuyihe

MacOSXでは、lldbにコード署名する必要があります。デバッグビルドとリリースビルドは、lldb_codesignという名前のコード署名証明書を使用してコード署名するように設定されています。

If you don't have one yet you will need to:
- Launch /Applications/Utilities/Keychain Access.app

- In Keychain Access select the "login" keychain in the "Keychains"
  list in the upper left hand corner of the window.

- Select the following menu item:

    Keychain Access->Certificate Assistant->Create a Certificate...

- Set the following settings

    Name = lldb_codesign
    Identity Type = Self Signed Root
    Certificate Type = Code Signing

- Click Continue
- Click Continue
- Click Done
- Click on the "My Certificates"
- Double click on your new lldb_codesign certificate
- Turn down the "Trust" disclosure triangle

    Change:
        When using this certificate: Always Trust

- Enter your login password to confirm and make it trusted

The next steps are necessary on SnowLeopard, but are probably because of a bug
how Keychain Access makes certificates.

- Option-drag the new lldb_codesign certificate from the login keychain to
  the System keychain in the Keychains pane of the main Keychain Access window
  to make a copy of this certificate in the System keychain.  You'll have to
  authorize a few more times, set it to be "Always trusted" when asked.
- Switch to the System keychain, and drag the copy of lldb_codesign you just
  made there onto the desktop.
- Switch to Terminal, and run the following:

Sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/lldb_codesign.cer

- Right click on the "lldb_codesign" certificate in the "System" keychain (NOT
  "login", but the one in "System"), and select "Delete" to delete it from
  the "System" keychain.
- Reboot
- Clean and rebuild lldb and you should be able to debug.

That should do it.

[注:-lldbはmacでgdbとして使用されます。]

1
Bhupesh Pant

this チュートリアルに従いましたが、すべて問題ありません。

1
ray6080

これらの手順は、OSX High Sierraで機能し、ルートとしてgdbを実行することを避けます(やっと!)最近、OSX 10.13.2から10.3.3に更新しました。これは、gdb 8.0.1(homebrewでインストール)が失敗し始めたときだと思います。

他の人の指示に苦労しました。別の指示の後、すべてが混乱でした。だから私は新鮮に始めました。私は多かれ少なかれ、これらの 指示 に従いました。

混乱をきれいにします。

  1. brew uninstall --force gdb # This deletes _all_ versions of gdb on the machine
  2. Applications-> Utilities-> Keychain Accessで、以前のすべてのgdb証明書とキーを削除しました(ここで何をしているのか必ず確認してください!)。これが必要かどうかは明らかではありませんが、他の命令を使用してそれらの証明書とキーを作成しようとしているので、とにかくそれらを削除しました。ログインとシステムの両方にキーと証明書がありました。

次に、gdbを再インストールします。

  1. brew install gdb
  2. Keychain Access内で、メニューKeychain Access-> Certificate Assistant-> Create a Certificateに移動します
  3. 「デフォルトを無効にする」をチェックして設定します
Name : gdb-cert
Identity Type: Self Signed Root
Certificate Type : Code Signing

[X] Let me override defaults
  1. 最初の証明書情報ページ:
Serial Number : 1
Validity Period (days): 3650
  1. 2番目の証明書情報ページで、すでに入力されているフィールドを除くすべてのフィールドを空白のままにしました。

  2. [キーペア情報]ページで、デフォルトのままにしました

Key Size : 2048
Algorithm : RSA
  1. [キー使用法の拡張]ページで、デフォルトをチェックしたままにしました。
[X] Include Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Signature
  1. [Extended Key Usage Extension]ページで、デフォルトをチェックしたままにしました。
[X] Include Extended Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Code Signing
  1. Basic Constraints Extensionページでは、何もチェックされていません(デフォルト)。

  2. [サブジェクト代替名の拡張子]ページで、デフォルトのチェックボックスをオンのままにして、他に何も追加しませんでした。

[X] Include Subject Alternate Name Extension
  1. [証明書の場所を指定]ページで、設定しました
Keychain: System
  1. [作成]をクリックすると、パスワードの入力を求められました。

  2. Keychain Accessアプリに戻り、Systemに移動してgdb-certを右クリックし、ドロップダウンメニューTrustの下で、すべてのフィールドをAlways Trustに変更しました。

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

  4. ターミナルで、codesign -s gdb-cert /usr/local/bin/gdbを実行しました。プロンプトが表示されたらパスワードを入力しました。

  5. ターミナルで、echo "set startup-with-Shell off" >> ~/.gdbinitを実行しました

  6. Gdbコンソール内でgdb myprogramを実行し、次にstartを実行しました。ここで、パスワードの入力を求められたと思います。その後、以降のすべての実行で、パスワードの入力が求められませんでした。

これは奇妙なアプローチですが、私にとってはうまくいきました(MacOs HighSierra 10.13.3)。 CLionをインストールします。 gdbが付属しています。ターミナルを使用してgdbを実行します。 gdbプログラムをusr/local/bin /にコピーします。サインイン、須藤などの問題なし.

0
Sparsh Gupta

ここでの指示に従ってください macOS上のCodesign gdb は、私にとってmacOS High Sierra(10.13.3)でこの問題を解決したようです。

0
Gino