2012-05-16 8 views
5

私はアップル社のGDBを使用してのデバッグ、続く奇妙なgdbのメッセージにC++プログラム

私のニーズのためのメイクファイル管理のプロジェクトは、私が頻繁に必要と特にので、より便利なので、私はXcodeのIDEを使用していない
GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul 3 01:19:56 UTC 2009) 
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". 

としてバージョンリモートマシン上でプログラムをコンパイルして実行する。私は最近、次のC++ 11の機能(g ++ - 4.6および4.7 macports)を使用し始めました:move constructors、nullptr、autoおよびdecltype。 I rencently私のコードをd3bugするために必要な、そして以下の奇妙なメッセージではなく、機能に足を踏み入れるの登場:それはないですので

Die: DW_TAG_unspecified_type (abbrev = 36, offset = 4315) 
     has children: FALSE 
     attributes: 
       DW_AT_name (DW_FORM_string) string: "decltype(nullptr)" 

このメッセージが表示されますので、から、以下のすべてのGDBのコマンドは、同じ奇妙なメッセージで応答していますこれ以上デバッグすることはできません。これはC++ 11に関連しているようです。私の質問は、あなたがこのメッセージに遭遇したことと、それを取り除く方法です。 ?あなたは(Appleのバージョン)を使用している事前に

おかげ

ジュリアーノ

+3

私の推測では、gdbの遅れがあります。[DWARF](http://wiki.dwarfstd.org/index.php?title=Dwarf_FAQ#What_is_DWARF.3F)の情報には、知っている。解決策:新しいgdbをビルド/インストールします。 – Flexo

答えて

3

GDBのバージョンはMacPortsのインストールからコンパイラの新しい機能をサポートしていないようです。

エラーメッセージは、GDBがプログラムで検出されたデバッグ情報の一部を理解していないことを報告しています。表示されているデバッグ情報は、明らかにC++ 11に関連しています。

解決策は、新しいGDBにアップグレードするか(おそらくmacportsがある場合はmacportsから)、GDBが理解できない機能を使用しないか、GDBのバージョンがこれを理解します。

+0

私はmacportのgdbを何回かインストールしようとしましたが、それは私のために働いたことはありません。私は急いでいるので、私はプログラムを変更したくないです。私はオプション#3が当面のものだと思います。受け入れられました。 – Giuliano

6

http://gcc.gnu.org/gcc-4.5/changes.html

GCCは現在、エピローグのためにも、アンワインド情報を生成言います。 GCCによって生成されたDWARF debuginfoは以前よりもDWARF3の多くの機能を使用し、DWARF4の機能もいくつか使用しています。 7.0より古いGDBはこれらのいずれも処理できないため、GCC 4.5で生成されたバイナリまたはライブラリをデバッグするにはGDB 7.0以降が必要です。 -gdwarf-3 -gstrict-dwarfオプションを使用してDWARF4機能の使用を無効にするか、-gdwarf-2 -gstrict-dwarfを使用してGCCをDWARF2に制限することができます。ただし、unwind infoが発行されるたびにepilogue unwind infoが無条件で発行されます。

しかし、コンパイラをアップグレードすると誰もがリリースノートを読んでいるので、あなたはすでにそれを知っていましたか? ;-)

+3

お役立ち情報もちろん、私は 'sudo port install whatever'を実行する前にリリースノート全体を注意深く読んでいます!あなたは誰と話していると思いますか? – Giuliano

+0

Lol ...もちろん誰もが知っていた! – jww