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 回答