web-dev-qa-db-ja.com

GDBの種類がmacOS Sierraで機能しない

昨日macOS Sierraに初めてアップデートしたときに現れた問題です。

GDB自体は正常に動作しています。ただし、どういうわけか、プログラムを実行できません。 「run」と「enter」と入力すると、次の情報ですぐにクラッシュします:During startup program terminated with signal SIG113, Real-time event 113.

私のGDBはhomebrewに基づいています。そこで、今日、homebrewパッケージ全体をアンインストールして、再インストールしました。コードサインのステップの後、私はまだ同じエラーに直面しました。

私は「須藤」と他のいくつかのことを試しました。 Googleは何が起こったのか見当もつきませんでした。だから、皆さんに魔法の解決策があるのではないかと思っていました。

41
Scott Chang

これは私が問題を簡単に修正した方法です。 [更新:受け取ったフィードバックに基づいており、まだ検証されていないため、このソリューションはmacOS Sierra 10.12で動作するようですが、macOS Sierra 10.12.2では動作しないようです]

ビデオの手順を参照してください こちら

  1. Gdbを終了します
  2. テキストエディターの使用(例: Sublime Text、.gdbinitというファイルをユーザーフォルダーに保存します。
  3. ファイルに次を追加します:set startup-with-Shell off
  4. ファイルを保存する
  5. gdbは動作するはずです

ソース

https://discussions.Apple.com/thread/7684629?start=0&tstart=

。gdbinitはどこにあり、どのように編集できますか?

https://sourceware.org/gdb/onlinedocs/gdb/Starting.html

60
Salamit

MacOS Sierraにアップデートした後、同じエラーが発生しました。ライブラリ lldbmi2 を使用して、一時的にデバッガーをLLDBに変更しました。
1。 git clone https://github.com/freedib/lldbmi2.git lldbmi2
2。 cd lldbmi2
3。 mkdir build
4。 cd build
5。 cmake ../
6。 make
7。 Sudo make install

Lldbmi2をインストールしたら、[デバッグ構成]で新しいC/C++アプリケーションを作成してアプリケーションをデバッグし、[デバッガ]タブでGDBデバッガーをgdbからlldbmi2に変更します。 lldbmi2のオプションをそこに設定できます。/usr/local/bin/lldbmi2 --logのようなもの。

enter image description here

すべてがうまく機能しているようで、GDBとしてはさらに良いようです。

10
Michał Ciołek

Sierra 10.12.0で機能した複数のソリューションは、Sierra 10.12.1では機能しません。このバージョンでは、「set startup-with-Shell off」でシェルの生成を無効にすることに加えて、GDBの更新バージョン(11月9日にFSFでコミットされたパッチ)が必要です。 http://blog.adacore.com/gnat-on-macos-sierra の手順を参照してください

5
Yannick Moy

これは、Sierraのランタイム整合性保護機能によるものです。指示 here に従って非アクティブ化できます。

  1. システムを再起動しますAppleロゴが画面に表示されるまでcommand + Rを押し続けます。
  2. メニューのユーティリティ/ターミナルタイプを選択します。ターミナルで「csrutil enable --without debug」を選択します。
  3. 最後に、マシンを再度再起動します

これを無効にするとシステムのセキュリティが低下することに注意してください。したがって、上記を実際に行うのはあなたの決断です。

この変更のもう1つの影響は、シェルを介して新しいプロセスを生成するときにDYLD_LIBRARY_PATH変数がリセットされないことです。この変数は、動的ライブラリーを見つけるために動的リンカーによって使用されます。実行可能ファイルにコーディングされた検索パスよりも優先されるため、OSによって安全でないと見なされます。その結果、macOSはデフォルトで変数の設定を解除し、生成した実行可能ファイルが独自のライブラリを使用するようにします。一部のライブラリがまだ見つからない場合は、代わりにDYLD_FALLBACK_LIBRARY_PATHを使用することをお勧めします。これは、アプリケーションのライブラリ検索パスの後にあります。

5
user3869292

macOSのバージョンが10.12.6であると仮定します。

  1. gdbをバージョン8.0.1にアップグレードしますbrew upgrade gdb
  2. execute echo "set startup-with-Shell off" >> ~/.gdbinit(gdbをbrewでインストールしたときにこのコマンドを見ました)
  3. gdb-certという名前の証明書を作成し、コード署名オプションでこの証明書を信頼します
  4. macを再起動します
  5. 実行Sudo codesign -s gdb-cert /usr/local/bin/gdb
  6. できました!楽しんでください〜

ところで、lldbを使用してgdbを置き換えることができます。

5
Jinmiao Luo

Sierraには複数の問題があります。

まず、以前のOSXバージョンで動作していた私のコードは、このバージョンで動作しなくなりました。コンパイルもしません。さらに、brewからのGDBは完全な混乱です。追加するために、他のサードパーティのライブラリが壊れました(例:libevent)。

(「良い仕事」アップル)。

Sierraに「アップグレード」した後、GDBを機能させるために次の手順を提案します。

  1. 新しいgccをインストールします(CPUなどによって異なりますが、約60分かかります)。

    gccをインストールする

  2. GDBのソースコードをダウンロードする

  3. Gccとg ++は古いgccとg ++のエイリアスであるため、必ず新しいgccとg ++にリンクしてください:

    export CC = `which gcc-6`

    export CXX = `which gxx-6`

  4. Gdbの構成とコンパイル:

    。/構成、設定

    make CFLAGS = -Wno-error = deprecated-declarations CXXFLAGS = -Wno-error = deprecated-declarations

    Sudo make install

4
Tomer

これは私のために働く:

  • 現在の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をアップグレードしないでください

4
fgriberi

私の答えは特にGDBに関連しているわけではありませんが、GDBを自分で動作させるのに苦労したので、LLDBを試してみることをお勧めします。私にとって、それは魅力のように働きました:

https://developer.Apple.com/library/content/documentation/IDEs/Conceptual/gdb_to_lldb_transition_guide/document/lldb-terminal-workflow-tutorial.html

Xcode自体はGDBの代わりにLLDBを使用するようになったため、Macユーザーにとってより便利な代替手段になります。そして、私の特定のケースでは、GDBよりもEclipseにはるかに簡単に統合しました:

https://wiki.Eclipse.org/CDT/User/FAQ#How_do_I_get_the_LLDB_debugger.3F

2
Carlos Ballock