EclipseとCDTを使用してC++コードをデバッグすると、変数ウィンドウは扱いにくくなり、標準テンプレートライブラリまたはboost(shared_ptrなど)で定義された型にはあまり情報を与えません。
これは、std :: vectorの場合の例です。
bar {...}
std::_Vector_base<TSample<MyTraits>, std::allocator<TSample<MyTraits> > >
_M_impl {...}
std::allocator<TSample<MyTraits> > {...}
_M_start 0x00007ffff7fb5010
_M_finish 0x00007ffff7fd4410
_M_end_of_storage 0x00007ffff7fd5010
これらのタイプの内部に関するこの情報が有用である場合でも、ほとんどすべての場合、ここでより明確なプレゼンテーション、つまりstd :: vectorの値のリストを期待します。これを実行できるツール、プラグイン、またはその他の変更はありますか?
[〜#〜] edit [〜#〜]
次の解決策は、Linuxでは機能しません。私はubuntu 14.04、Eclipse、g ++、gdbを使用しています。
パッケージgdb-pythonが見つからず、Linuxはmingwを使用しません
構造をきれいに印刷するには、pythonを使用できるGDBのバージョンが必要です。少なくともmingwを使用しているウィンドウでは、これはデフォルトのインストールでは提供されません。
Pretty Printersは、python gdbに特定の構造を表示する方法を指示するモジュールです。独自に作成することもできますが、ダウンロード可能なSTL用のプリンターは既にあります。
Windowsでプリティプリンターを機能させるには(他のOSでも同様の手順が必要です):
前提条件
Python 2.7がシステムパスにインストールされていることを確認してください。
MinGW-getがインストールされていることを確認してください
http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/
SVNクライアントがインストールされていることを確認してください
インストール:
コマンドシェルを開き、次のように入力します。
mingw-get install gdb-python
終了したら、ローカルディレクトリにcdし、次のように入力してプリンターをインストールします。
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
.gdbinitを開き(必要に応じてテキストエディターで作成)、「C:/ directory」をプリンターをチェックインしたフォルダーに置き換えて次のように入力します。
Python
システムのインポート
sys.path.insert(0、 'C:/ directory')
libstdcxx.v6.printersからregister_libstdcxx_printersをインポート
register_libstdcxx_printers(なし)
終わり
Eclipse Setup
それだけです、通常のようにデバッグしてください。stl構造は読みやすいはずです。
さて、gdbはSTLコンテナをネイティブにサポートしていません。 STLオブジェクトの内部動作を公開するため、これが間違っているとは言えませんが、ほとんどの場合、それは私たちが望むものではありませんか?
Gdb 7.0を使用している場合は、きれいなプリンターを利用できます。このWebサイト http://sourceware.org/gdb/wiki/STLSupport には、それらの設定方法に関する非常に簡単なチュートリアルがあります。興味のある部分の下にコピーしました:
最新のPython libstdc ++プリンターをマシン上の場所にチェックアウトします。ローカルディレクトリで、次の操作を行います。
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
以下を〜/ .gdbinitに追加します。パスは、上記のpythonモジュールがチェックアウトされた場所と一致する必要があります。
python import sys sys.path.insert(0, '/home/maude/gdb_printers/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end
パスは、上記の例で調整する必要がある唯一の要素でなければなりません。ロードしたら、プリンターがサポートするSTLクラスは、より人間が読める形式で印刷する必要があります。クラスを古いスタイルで印刷するには、printコマンドで/ r(raw)スイッチを使用します(つまり、print/r foo)。これは、Python pretty-printersがロードされなかったようにクラスを印刷します。
Eclipse cdtを使用しているため、デバッグ構成を.gdbinitファイルに指定することを忘れないでください。新しいデバッグ構成を作成するときは、[デバッガ]タブに移動し、[GDBコマンドファイル]フィールドに.gdbinitファイルへのパスを入力します。
それがお役に立てば幸いです!
変数リストのデバッグビューでベクトルを展開します。
"vector_name"
-> std::_Vector_base<"datatype">
-> _M_impl
[_M_start
]を右クリックして[配列として表示...]を選択し、その長さを入力して[OK]をクリックします。これで、ベクターの各アイテムを展開できます。
gdb
のCDT
サポートがある場合(たとえば、 EclipseのGDB を参照)、これを試すことができます。 STLコンテナの参照解除
昔、私もあなたの同じ問題に出くわしました。 STLコンテナを確認するのは苦痛でした。次に、そのリンクを見つけて.gdbinit
これらの定義のいくつかをファイルします。その後の生活は楽になりました。
注:私のgdb
バージョンは7.1であり、これらの定義の追加は正常に機能します。 gdb
の新しいバージョンに既に含まれているかどうかはわかりません。
いくつかの重要な手順が省略されているため、Windows 7の対応について詳しく説明します。
0)python GDBがない場合は、シェル/コマンドを開き、MinGW-get.exeを使用してPython対応GDBを「インストール」します。
MinGw-get.exe install gdb-python
1a) http://python.org/download/ からPython 2.7.xを取得してインストール
1b)PYTHONPATHおよびPYTHONHOMEが環境に設定されていることを確認します。
PYTHONPATH should be C:\Python27\Lib (or similar)
PYTHONHOME should be C:\Python27
1c)PYTHONHOMEをPATHに追加します
%PYTHONHOME%;...
2a)テキスト入力を開き、次のステートメントを入力します。 3行目はpythonスクリプトがある場所を指していることに注意してください。これについては以下の注を参照してください!
python
import sys
sys.path.insert(0, 'C:/MinGW/share/gcc-4.6.1/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end
2b) '.gdbinit'として保存注:Windowsエクスプローラーでは、エクスプローラーのピリオドで始まるファイルに名前を付けることはできません。ほとんどのテキスト編集(メモ帳を含む)で可能です。 GDB initファイルは、ロード時にGBDが実行するGDBコマンドの「スクリプト」のようなものです。
2c) '.gdbinit'ファイルはGDBの作業ディレクトリにある必要があります(ほとんどの場合、これはプロジェクトのルートディレクトリですが、IDEで確認できます。
3)Eclipse(または他のIDE)設定ダイアログを開きます。 C++デバッガーのサブメニューに移動します。
4)C:\MinGW\bin\gdb-python27.exe
をデバッガーとして使用し、.gdbinit
を構成ファイルとして使用するようにEclipseを構成します。
5a)すべてのデバッグ起動構成を再作成します(古い構成を削除し、新しい構成を最初から作成します)。
--OR--
5b)各デバッグ構成を編集して、新しいgdb-python.exeをポイントし、それをポイントします。
-場所をpythonディレクトリに変更することを忘れないでくださいpythonコード!このディレクトリはMinGWによって作成されているので、移動しないでくださいきれいなプリンターをダウンロードするために、MinGWは手順0でそれを行いました。MinGWインストールディレクター、共有フォルダー、GCCフォルダー(バージョン番号があります)に移動すると、pythonフォルダーが見つかりますこの場所は、python GDBによってロードされたスクリプトにあるはずです。
-また、.gdbinitはPITAであり、その名前が正しく、gdb-python.exeが存在する場所とは限らないGDBの作業フォルダーに名前が付けられていることを確認してください! GDBのロード時にGDB出力を見て、a)ロード中に「python-enabled」が表示され、.gdbinitのステートメントが表示されているかどうかを確認します。
-最後に、システム変数に多くの問題がありました。 pythonで 'ImportError'が表示される場合、PYTHONPATHまたはPYTHONHOMEを設定していない可能性があります。
-「gdb-python27」を含むディレクトリ(例:C:\ MinGW\bin)もパス上にある必要があります。パスがある場合は、絶対パスを入力する必要がないため、Eclipseのセットアップが少し良くなります。 。それでも、.gbdinitには絶対パスが必要な場合があります。動作する場合、デバッガの起動時にgbd(コンソール-> gdbトレース)からの出力が次のように表示されます。
835,059 4^done
835,059 (gdb)
835,059 5-enable-pretty-printing
835,069 5^done
....
835,129 12^done
835,129 (gdb)
835,129 13source C:\MinGW\bin\.gdbinit
835,139 &"source C:\\MinGW\\bin\\.gdbinit\n"
835,142 13^done
835,142 (gdb)
JDT(EclipseのJava環境)は、変数値をデバッグビューに表示するときに適用されるカスタム「フォーマッター」を提供することを知っています。 CDTでのgoogleのクイックルックでは、次のページが表示されます。
http://wiki.Eclipse.org/CDT/Better_Debugging_%28GSoC_project%29
これがメインのCDT行にまだ統合されているかどうかはわかりません。デバッグ中に変数を右クリックして(最後のCDTで)、カスタムフォーマッターエントリがあるかどうかを確認できます。利用できない場合は、CDTトラッカーに新しいトラッカーエントリを追加して、この機能強化を依頼することをお勧めします。