web-dev-qa-db-ja.com

macos High Sierra 10.13.3でgdbが機能しない

Brewでgdb 8.1をインストールしました。

私はコードサインgdbと.gdbinitを以下のように持っています:

set startup-with-Shell off

SIP機能を無効にしました:

$ csrutil status
System Integrity Protection status: disabled.

しかし、gdbはまだ機能しません。

#include <iostream>
using namespace std;

int main() {
  cout << "hello world!" << endl;
  return 0;
}

コンパイルコマンド:

g++ -g test.cpp

gdb出力:

GNU gdb (GDB) 8.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-Apple-darwin17.3.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos Word" to search for commands related to "Word"...
Reading symbols from a.out...Reading symbols from /Users/mypc/Downloads/a.out.dSYM/Contents/Resources/DWARF/a.out...done.
done.
(gdb) run
Starting program: /Users/mypc/Downloads/a.out 
[New Thread 0x2503 of process 802]
[New Thread 0x2303 of process 802]
During startup program terminated with signal ?, Unknown signal.
(gdb) 

Macosシエラでgdbを動作させるための正しい手順は何ですか?

42
lucky1928

これは、最新のgdb 8.1が原因です。gdbを8.0.1にダウングレードすると、この問題を解決できます。

Gdb 8.0.1にダウングレードする方法

  • 現在のgdbのリンクを解除:brew unlink gdb
  • Gdb 8.0.1をインストールします:brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
  • オプション:brew pin gdbを使用してgdbをアップグレードしないでください
59
Hongbo Liu

私の場合、8.0.1にダウングレードしても解決しませんでした。
しかし、次の手順は役に立ちました。

(再起動する代わりにgdbをテストし、正常に動作したため、手順12の「動作するかどうかを確認する」を挿入しました。手順12以降は実行しませんでした)


  1. キーチェーンアクセスを開く
  2. メニューで、[キーチェーンアクセス]> [証明書アシスタント]> [証明書を作成]を開きます。
  3. 名前を付けます(例:gdb-cert
    • IDタイプ:自己署名ルート
    • 証明書の種類:コード署名
    • チェック:デフォルトを上書きさせてください
  4. 「...の場所を指定する」まで続行します
  5. キーチェーンの場所をシステムに設定します
  6. 証明書を作成し、証明書アシスタントを閉じます。
  7. システムキーチェーンで証明書を見つけます。
  8. 証明書をダブルクリックします
  9. 信頼を展開し、コード署名を常に信頼に設定します
  10. ターミナルでタスクゲートされた再起動:killall taskgated
  11. 証明書を使用してgdbを共同設計します:codesign -fs gdb-cert /usr/local/bin/gdb
  12. ---動作するか確認---
  13. Macをシャットダウンし、リカバリモードで再起動します(command-Runtil Appleロゴが表示されます)
  14. ターミナルウィンドウを開く
  15. デバッグを許可するようにシステム整合性保護を変更します:csrutil enable --without debug
  16. Macを再起動します
  17. Gdbを使用したデバッグが期待どおりに機能するようになりました。

情報源:
Pre Sierra: https://Gist.github.com/hlissner/898b7dfc0a3b63824a70e15cd0180154
Sierra: https://Gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d

2
GnoStiC

私はmacOS 10.13.6を使用していますが、「(gdbがコード署名されていることを確認してください-taskgated(8)を参照)」という同じ問題がありました...

GDBを8.2.1から8.0.1にダウングレードし、gdb-certを再度作成して署名すると、正常に機能しました。

Eclipseのデバッガーでgdbのパスを8.2.1から8.0.1に変更することを忘れないでください。再起動すると動作します。

0
AB007