web-dev-qa-db-ja.com

Eclipse CDTでC ++ STLオブジェクトのgdbプリティ印刷を有効にする方法

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出力を取得できます。たとえば、文字列を出力すると、無駄な出力が得られます。

よろしく、アレックス

39
AlejandroVK

これは私のために働く解決策です。

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)を介してきれいに印刷できます。

次に、Eclipseでのデバッグ中の使用法について説明します。

ダウンロード( 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があります

58
Riga

私はこれが元の質問に答えていないことを知っていますが、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)デバッグ起動セッションを再作成します(古いセッションを削除し、新しいセッションを最初から作成します)。

10
rustyx

いくつかの重要な手順が省略されているため、Windows 7の対応について詳しく説明します。

これは、Eclipse CDTを使用するMinGWユーザー向けです。

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) 
5

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互換性があります

2
acel

eclipse CDTでSTLオブジェクトを表示するには、これを行うとうまく動作します:

http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF

(送信したリンクのオプション番号2)

お役に立てれば

1
Bob Yoplait