41

Eclipsecdtで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シェルで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から素晴らしい出力を取得できます。たとえば、文字列を出力すると、役に立たない出力が得られます。

よろしく、アレックス

4

5 に答える 5

65

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

ダウンロード ( 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) に配置します。チェックアウト ディレクトリに「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/ ) 最新の Stream Stable Build または Eclipse のリリース (>=3.7 バージョン)。

最新の Eclipseをダウンロードします ( Eclipse Indigo の場合は http://download.eclipse.org/tools/cdt/builds/8.0.0/index.html、Eclipse Juno の場合はhttp://www.eclipse.org/cdt/downloads.php )。 C/C++ 開発ツール (Eclipse CDT)。

Eclipse を実行し、オプションを保存するワークスペース ディレクトリ (つまり、$HOME/projects) を選択します。Help->Install New Software... をクリックします Add...->Archive... をクリックし、ダウンロードした CDT ビルドを選択します。次に、インストールするコンポーネントを選択する必要があります。[CDT Main Features] -> [C/C++ Development Tools] (および場合によってはその他の選択したコンポーネント) をクリックします。次に、インストールを続行し、Eclipse を再起動します。

Eclipse で gdb と .gdbinit の適切な場所を指定し、プリティ プリンティング オプションが有効になっていることを確認します。

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)を参照してください。

UPDATE2: ubuntu 12.04 には /usr/share/gcc-4.6/python/libstdcxx/ python モジュールをインストールする libstdc++6-4.6-dbg があります

于 2011-04-19T08:07:01.667 に答える
10

これが元の質問に答えていないことはわかっていますが、 Windows / MinGWの Eclipse でデバッグする人には役立つかもしれないと思いました。Windows の手順も同様です。

1) http://python.org/download/から Python 2.7.x を入手します。

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) Eclipse CDT をC:\MinGW\bin\gdb-python27.exeデバッガーとして使用し、構成.gdbinitファイルとして使用するように構成します。

4) デバッグ起動セッションを再作成します (古いものを削除し、新しいものを最初から作成します)。

于 2012-03-02T17:17:43.047 に答える
6

いくつかの重要な手順が省略されているため、Windows7の応答を拡張したいと思います。

これは、EclipseCDTを使用する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を追加します

 %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の作業フォルダーにあることを確認してください。GDBの作業フォルダーは、必ずしもgdb-python.exeが配置されている場所ではありません。GDBのロード時にGDBの出力を調べて、ロード中にa)'python-enabled'が表示されるかどうか、および.gdbinitのステートメントが表示されるかどうかを確認します。

-最後に、システム変数に関して多くの問題がありました。Pythonで「ImportError」が表示される場合は、PYTHONPATHまたはPYTHONHOMEを設定していない可能性があります。

--'gdb-python27'のディレクトリ(例:C:\ MinGW \ bin')もパス上にある必要があります。そうであれば、絶対パスを入力する必要がないため、Eclipseの設定が少し簡単になります。 。しかし、それでも、.gbdinitに絶対パスが必要な場合があります。動作する場合は、デバッガーの起動時に次のようなgbd(console-> gdb traces)からの出力が表示されます。

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) 
于 2013-01-10T19:02:13.117 に答える
2

受け入れられた回答に従って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 を使用しているためです (この回答で確認してください) 。

この問題の回避策はこちらで説明されています

または、手順に従って、Python 3 互換の svn://gcc.gnu.org からソースを取得します。

于 2014-08-28T20:34:08.493 に答える
1

Eclipse CDT で STL オブジェクトを表示するには、これを実行すると正常に動作します。

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

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

お役に立てれば

于 2011-02-13T17:11:25.767 に答える