昨日macOS Sierraに初めてアップデートしたときに現れた問題です。
GDB自体は正常に動作しています。ただし、どういうわけか、プログラムを実行できません。 「run」と「enter」と入力すると、次の情報ですぐにクラッシュします:During startup program terminated with signal SIG113, Real-time event 113.
私のGDBはhomebrewに基づいています。そこで、今日、homebrewパッケージ全体をアンインストールして、再インストールしました。コードサインのステップの後、私はまだ同じエラーに直面しました。
私は「須藤」と他のいくつかのことを試しました。 Googleは何が起こったのか見当もつきませんでした。だから、皆さんに魔法の解決策があるのではないかと思っていました。
これは私が問題を簡単に修正した方法です。 [更新:受け取ったフィードバックに基づいており、まだ検証されていないため、このソリューションはmacOS Sierra 10.12で動作するようですが、macOS Sierra 10.12.2では動作しないようです]
ビデオの手順を参照してください こちら
.gdbinit
というファイルをユーザーフォルダーに保存します。set startup-with-Shell off
ソース
https://discussions.Apple.com/thread/7684629?start=0&tstart=
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のようなもの。
すべてがうまく機能しているようで、GDBとしてはさらに良いようです。
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 の手順を参照してください
これは、Sierraのランタイム整合性保護機能によるものです。指示 here に従って非アクティブ化できます。
- システムを再起動しますAppleロゴが画面に表示されるまでcommand + Rを押し続けます。
- メニューのユーティリティ/ターミナルタイプを選択します。ターミナルで「csrutil enable --without debug」を選択します。
- 最後に、マシンを再度再起動します
これを無効にするとシステムのセキュリティが低下することに注意してください。したがって、上記を実際に行うのはあなたの決断です。
この変更のもう1つの影響は、シェルを介して新しいプロセスを生成するときにDYLD_LIBRARY_PATH変数がリセットされないことです。この変数は、動的ライブラリーを見つけるために動的リンカーによって使用されます。実行可能ファイルにコーディングされた検索パスよりも優先されるため、OSによって安全でないと見なされます。その結果、macOSはデフォルトで変数の設定を解除し、生成した実行可能ファイルが独自のライブラリを使用するようにします。一部のライブラリがまだ見つからない場合は、代わりにDYLD_FALLBACK_LIBRARY_PATHを使用することをお勧めします。これは、アプリケーションのライブラリ検索パスの後にあります。
macOSのバージョンが10.12.6であると仮定します。
brew upgrade gdb
echo "set startup-with-Shell off" >> ~/.gdbinit
(gdbをbrewでインストールしたときにこのコマンドを見ました)gdb-cert
という名前の証明書を作成し、コード署名オプションでこの証明書を信頼しますSudo codesign -s gdb-cert /usr/local/bin/gdb
ところで、lldbを使用してgdbを置き換えることができます。
Sierraには複数の問題があります。
まず、以前のOSXバージョンで動作していた私のコードは、このバージョンで動作しなくなりました。コンパイルもしません。さらに、brewからのGDBは完全な混乱です。追加するために、他のサードパーティのライブラリが壊れました(例:libevent)。
(「良い仕事」アップル)。
Sierraに「アップグレード」した後、GDBを機能させるために次の手順を提案します。
新しいgccをインストールします(CPUなどによって異なりますが、約60分かかります)。
gccをインストールする
GDBのソースコードをダウンロードする
Gccとg ++は古いgccとg ++のエイリアスであるため、必ず新しいgccとg ++にリンクしてください:
export CC = `which gcc-6`
export CXX = `which gxx-6`
Gdbの構成とコンパイル:
。/構成、設定
make CFLAGS = -Wno-error = deprecated-declarations CXXFLAGS = -Wno-error = deprecated-declarations
Sudo make install
これは私のために働く:
現在の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をアップグレードしないでください
私の答えは特にGDBに関連しているわけではありませんが、GDBを自分で動作させるのに苦労したので、LLDBを試してみることをお勧めします。私にとって、それは魅力のように働きました:
Xcode自体はGDBの代わりにLLDBを使用するようになったため、Macユーザーにとってより便利な代替手段になります。そして、私の特定のケースでは、GDBよりもEclipseにはるかに簡単に統合しました:
https://wiki.Eclipse.org/CDT/User/FAQ#How_do_I_get_the_LLDB_debugger.3F