GNU / LinuxでのC ++プログラムのデバッグ

たまたま、私は長い間、GNU / Linuxファミリーのオペレーティングシステムで多くの時間を費やしていました。 私の活動の主なタイプは、C ++でのソフトウェア開発です。



そのため、デバッガーを使用する際の主な問題は、たとえばstlコンテナーなどの複雑なコンテナーの表示です。



私が提案するソリューションは、gdbに関連しています。 このデバッガはpythonで記述されたスクリプトをサポートし、複雑なオブジェクトを表示するメカニズムはプリティプリンタと呼ばれます。 つまり デバッガーがすべてを正しく表示するには、これらのきれいなプリンターを備えたスクリプトがどこにあるかをデバッガーに伝える必要があります。 デバッガーに追加のコマンドを指定するには、.gdbinitファイルが必要です。



ですから、マニュアルのようにすべてを整理し、より便利に読むようにします。私自身も忘れません。



1. gcc、g ++、gdb、libstdc ++-dbgをインストールします。後者は非常に重要です。 新しいディストリビューションでは、スクリプトがきれいなプリンターでインストールされるのはデバッグ文字です。たとえば、Ubuntu 14.04では/usr/share/gcc-4.8/python/libstdcxxディレクトリーが表示されます。

2.次の内容の.gdbinitファイルをホームディレクトリに作成します



# # .gdbinit : GDB Config file # # add python pretty printers for STL python import sys sys.path.insert(0, '/usr/share/gcc-4.8/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end set auto-load local-gdbinit on 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
      
      







すべてがうまくいくように見えますが、問題があります。GNU/ Linuxの最新バージョンでは、gdbはpythonバージョン3をサポートするように構築されています。*およびデフォルトではpythonバージョン2がインストールされています。 この問題を解決するには、つまり Pythonの両方のバージョンをサポートするスクリプトを作成するためのパッチがあります。ネットワークのオープンスペースで見つけることができます。_https://www.dropbox.com/s/ef265fbo00yk1x8/libstdcpp.patchから入手できます。 変更対象は/usr/share/gcc-4.8/python/libstdcxx/v6/printers.pyです



繰り返しますが、すべてがうまくいくように見えますが、問題があります。一部のディストリビューションでは、きれいなプリンターを備えたスクリプトがインストールされていません。 これを行うために、svnリポジトリ_svnがあります://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python。 追加の説明を含むリンクは次のとおりです。_http://sourceware.org/gdb/wiki/STLSupport。 この場合、リポジトリをアンロードした後、ダウンロードしたスクリプトへのパスを.gdbinitファイルに変更することを忘れないでください。



3.デバッグを使用してプロジェクトをアセンブルする場合、_GLIBCXX_DEBUGフラグを必ず指定してください。 これは、stringstreamなどのコンテナーが正しく表示されるために必要です。



結論として、QtCreatorをIDEとして使用する場合、プリティプリンターでの「ダンス」(2番目のポイント)は必要ありません。 このIDEはそのスクリプトを使用してgdbと対話します。



All Articles