CDTを使用する場合、std::stringが含まれている文字列とともに「変数」デバッグウィンドウに表示されるようにします。たとえば、現在「履歴」という単語を保持している場合、「変数」というラベルの付いたデバッガウィンドウに履歴を表示したいと思います。
オブジェクトにドリルダウンする一般的な方法があると思いますが、指を置くことができません。誰かがこれを行う方法を知っていますか?
これは、複雑なオブジェクトから1つのフィールドだけを出力するときにも役立ちます。
ありがとう、ビル
CDTを使用する場合、std::stringが含まれている文字列とともに「変数」デバッグウィンドウに表示されるようにします。たとえば、現在「履歴」という単語を保持している場合、「変数」というラベルの付いたデバッガウィンドウに履歴を表示したいと思います。
オブジェクトにドリルダウンする一般的な方法があると思いますが、指を置くことができません。誰かがこれを行う方法を知っていますか?
これは、複雑なオブジェクトから1つのフィールドだけを出力するときにも役立ちます。
ありがとう、ビル
eclipse/gdb を使用して stl コンテナーを表示することも、長い間私にとって大きな苦痛でした。
しかし今、Python が有効になっている gdb の最新バージョンがそれを助けることができることを発見しました。
それは私がやったことに従います(Ubuntu Linux 8.10を使用):
次の内容で、プロジェクト ルートに .gdbinit という名前のファイルを作成します。
python import gdb.libstdcxx.v6.printers
これで、stl コンテナーがきれいに印刷されます。
既に Python 対応の gdb があるかどうか (または新しいインストールが機能しているかどうか) を確認したい場合:
gdb プロンプトで次を実行します。
(gdb) python print 'Python 対応の GDB が動作しています!'
上記のコマンドが期待どおりの結果を生成する場合、それは機能しています。
詳細については、このブログを確認してください。
オブジェクトにドリルダウンする一般的な方法は必要ないことに注意してください。STLコンテナをきれいに印刷したい。
CDTはこれをデバッガーバックエンドに委任していると思います。つまり、変数の値とその展開方法についてCDTに通知するのは、デバッガー(gdb、おそらく?)次第です。
編集:CDTに同梱されているGDBバックエンドは、STLコンテナーの「インテリジェントな」表示をサポートしていないと思います。これに本当に興味がある場合は、CDT開発チーム(cdt-dev@eclipse.org)に連絡することをお勧めします。
更新/編集:CDTできれいなプリンターを有効にする方法については、以下の他の応答を参照してください。
ウィンドウズ7
きれいなプリンターを取得します。
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
C/C++ デバッグ Gdb:
C:\MinGW\bin\gdb-python27.exe C:\MinGW\bin\.gdbinit
いくつかの重要な手順が省略されているため、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) Eclipse を構成しC:\MinGW\bin\gdb-python27.exe
て、デバッガーとして使用し、構成.gdbinit
ファイルとして使用します。
5a) すべてのデバッグ起動構成を再作成します (古いものを削除し、新しいものを最初から作成します)。
--OR--
5b) 各デバッグ構成を編集し、それを新しい gdb-python.exe にポイントし、それを.
-- 上記の python コードで、場所を python ディレクトリに変更することを忘れないでください! このディレクトリは MinGW によって作成されるため、きれいなプリンターをダウンロードしようとしないでください。MinGW がステップ 0 でダウンロードしてくれます。MinGW インストール ディレクトリ、共有フォルダー、GCC フォルダー (バージョン番号あり) に移動するだけで、python フォルダーが見つかります。この場所は、GDB によってロードされた Python スクリプト内にあるべきものです。
-- また、.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)
私が見つけた唯一の方法は、GDB コマンドラインを使用することです。
up
コマンドを使用して目的のスタック フレームに移動します。コンソールウィンドウで、次のコマンドを使用してprint
変数を表示し
std::string
ます。
p mystring
しかし、それは大変なことです。
私が気付いたのは、変数にカーソルを合わせると、実際には std::string のフィールドが表示されますが、切り捨てられているため、最も興味深い部分である文字列値が表示されないことです。おそらく、表示される値の最大長を増やす方法があります。
あなたの最善の策は、Eclipseのコンソール/デバッガーウィンドウで開くことができるgdbコンソールで入力できるいくつかのgdbマクロを使用することです。ここで見つけることができます: http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.01.txt
ホバー時に自動ではありませんが、入力する必要があるのは面倒です....しかし、2009年になっても、Eclipse CDTはいくつかの優れたデバッグ機能を提供することに成功していないため、これが最善の方法です.
RPSENG へ: ヒント rpseng に感謝します! それはうまく動作します!残念ながら、私の日食 (Ganymede) は非常に混乱しているようで、自分で作成したクラスのインスタンスへのポインターの型とその継承をこれ以上検出できないため、これらのポインターのメンバー変数をステップ実行することはできなくなりました。CDT 6.0 を使用していますか?