0

さて、デバッグしようとしているこのQtアプリケーションがあります。その上でvalgrindを実行し、出力をファイルにリダイレクトすると、次のような「完全に失われた」ブロックが多数表示され、悲しくなります。

==24357== 24 bytes in 1 blocks are definitely lost in loss record 150 of 508
==24357==    at 0x4C2C56F: malloc (vg_replace_malloc.c:267)
==24357==    by 0x76ED3CA: FcPatternCreate (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.4.4)
==24357==    by 0x76EB3CD: FcFontRenderPrepare (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.4.4)
==24357==    by 0x76EB66C: FcFontMatch (in /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.4.4)
==24357==    by 0x57163D7: QFontDatabase::load(QFontPrivate const*, int) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.1)
==24357==    by 0x56F3586: QFontPrivate::engineForScript(int) const (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.1)
==24357==    by 0x5728482: ??? (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.1)
==24357==    by 0x573B73D: QTextLine::layout_helper(int) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.1)
==24357==    by 0x573D5A4: QTextLayout::endLayout() (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.1)
==24357==    by 0x58F33CE: QLineControl::updateDisplayText(bool) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.1)
==24357==    by 0x58F36C6: QLineControl::init(QString const&) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.1)
==24357==    by 0x58EC720: ??? (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.1)

私はvalgrindがあまり得意ではありませんが、私が知る限り、このトレースは私のソースファイルに戻りませんよね?実際、完全なvalgrindレポート(-vスイッチを使用)のどこにも、QApplicationを宣言するmain()を除いて、ソースファイルは表示されません。

次に、CMakeを使用してプロジェクトを正しくコンパイルしていないと想定できますか?うまくいけば、それが問題です。valgrindレポートは今のところあまり役に立たないようです。

次に、CmakeLists.txtで、次のようなデバッグフラグを使用してプロジェクトをコンパイルしようとしています。

 set(CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb -O0")

これはこれを行うための適切な方法ですか?

私はここで何か間違ったことをしていますか?

ありがとう、そしてそのような長い質問をお詫びします!:/

4

1 に答える 1

0

通常の手順は、構成段階でCMAKE_BUILD_TYPE変数を、、Debugなどに設定することです。Releaseこれは-D、コマンドラインツールのフラグを使用cmakeするか、GUIの適切なフィールドを変更することで実現できます。

コンパイラに追加のフラグを渡したい場合は、を設定CMAKE_CXX_FLAGSしたのと同じ方法で設定してくださいCMAKE_BUILD_TYPE

CMakeLists.txtご覧のとおり、これはファイルの変更を必要としませんがCMakeCache.txt、ビルドディレクトリにあります。

于 2012-07-08T11:29:41.210 に答える