Eclipse cdtでSTLオブジェクトのきれいな印刷を追加しようとしています。ここで説明する手順を実行しようとしました。
http://sourceware.org/gdb/wiki/STLSupport
pythonフォルダをチェックアウトしましたが、これを完了できないようです...
Gdbinitを作成し、デバッグ構成用に選択しましたが、デバッグを開始しようとすると次のエラーが表示されます。
Error while executing Python code.
!STACK 0
Java.lang.Exception: /home/lizardking/workspace/eu.sofia.kpi.cpp.x86.testapp/.gdbinit:6: Error in sourced command file:
Error while executing Python code.
at org.Eclipse.cdt.dsf.mi.service.command.AbstractMIControl$RxThread.processMIOutput(AbstractMIControl.Java:824)
at org.Eclipse.cdt.dsf.mi.service.command.AbstractMIControl$RxThread.run(AbstractMIControl.Java:662)
python Shellでgdbinitの内容を実行しようとすると、このエラーが表示されます。
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import sys
sys.path.insert(0, '/home/Documents/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named libstdcxx.v6.printers
私はそのようなモジュールを持っていないようです... Pythonについての手がかりがないので、Pythonで「モジュール」が何であるかさえ知りません。..
誰かがこれで私を助けることができますか?本当のデバッグ情報を見ることができるか、それをそのままにしておくと便利です。または、コンソールからでもデバッグして、gdbからNice出力を取得できます。たとえば、文字列を出力すると、無駄な出力が得られます。
よろしく、アレックス
これは私のために働く解決策です。
( http://www.gnu.org/software/gdb/download/ )をダウンロードし、最新のgdbをインストールします(つまり--prefix $ HOMEを使用)。 pythonスクリプトをサポートしています。
実行してpython pretty printersを取得
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python
選択したディレクトリ($(HOME)/ distribs/gdb_printers) checkoutディレクトリに「python」サブディレクトリが作成されます。
これをプリティプリンタへの適切なパスとともに$(HOME)/。gdbinitファイルに入れます。
_python
import sys
sys.path.insert(0, '/home/YOUR_NAME_HERE/distribs/gdb_printers/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end
_
これにより、gdbのコマンドラインインターフェイス(>(gdb) p my_std_string
)を介してきれいに印刷できます。
ダウンロード( http://download.Eclipse.org/Eclipse/downloads/ )Eclipseの最新のストリーム安定ビルドまたはリリース(> = 3.7バージョン)。
ダウンロード( http://download.Eclipse.org/tools/cdt/builds/8.0.0/index.html Eclipse Indigoの場合、または http://www.Eclipse.org/ cdt/downloads.php Eclipse Junoの場合)最新のEclipse C/C++開発ツール(Eclipse CDT)。
Eclipseを実行し、オプションが保存されるワークスペースディレクトリを選択します(つまり、$ HOME/projects)。 [ヘルプ]-> [新しいソフトウェアのインストール...]をクリックし、[追加...]-> [アーカイブ...]をクリックして、ダウンロードしたCDTビルドを選択します。次に、インストールするコンポーネントを選択する必要があります。[CDT Main Features]-> [C/C++ Development Tools(および選択した他のコンポーネント)をクリックします。次に、インストールを続行してEclipseを再起動します。
Eclipseでgdbと.gdbinitの適切な場所を指定し、Pretty Printingオプションが有効になっていることを確認します。
_Window -> preferences -> C/C++ -> Debug -> GDB
_
これで、Eclipseでのデバッグ中に、変数ビューでSTLコンテナーをきれいに印刷できます。
他のコマンドを使用して、gdbの出力をより適切にすることができます。
_set print pretty on
set print object on
set print static-members on
set print vtbl on
set print demangle on
set demangle-style gnu-v3
set print sevenbit-strings off
_
更新:古いプロジェクトで動作するようにする方法については、下記のrustyxの回答のポイント4)を参照してください。
更新2:ubuntu 12.04には、/ usr/share/gcc-4.6/python/libstdcxx/python module for youをインストールするlibstdc ++ 6-4.6-dbgがあります
私はこれが元の質問に答えていないことを知っていますが、Windows/MinGWでEclipseでデバッグする人にとって有用だと思いました。 Windowsの手順は同様です。
1)Python 2.7.xから http://python.org/download/ を取得
2)次のようなものを含む.gdbinit
を作成します。
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
3)C:\MinGW\bin\gdb-python27.exe
をデバッガーとして使用し、.gdbinit
を構成ファイルとして使用するようにEclipse CDTを構成します。
4)デバッグ起動セッションを再作成します(古いセッションを削除し、新しいセッションを最初から作成します)。
いくつかの重要な手順が省略されているため、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)
accepted answer をたどり、UPDATE2とgdbが次のようなエラーを受け取った場合:
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "/usr/share/gcc-4.8/python/libstdcxx/v6/printers.py", line 54
raise ValueError, "Cannot find type %s::%s" % (str(orig), name)
^
SyntaxError: invalid syntax
/home/[you]/.gdbinit:6: Error in sourced command file:
Error while executing Python code.
お使いのgdbのバージョンがPython 3( this answer で確認)を使用しているためです
この問題の回避策を説明します here
または、指示に従ってsvn://gcc.gnu.orgからソースを取得します。これはPython 3互換性があります
eclipse CDTでSTLオブジェクトを表示するには、これを行うとうまく動作します:
http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF
(送信したリンクのオプション番号2)
お役に立てれば