Флаги Cmake для отладки не кажутся полезными в valgrind?
Итак, у меня есть приложение 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) мои исходные файлы не появляются, кроме main(), где я объявляю QApplication.
Тогда я могу предположить, что не правильно компилирую свой проект с CMake? Надеюсь, что это проблема, потому что отчет о Вальгринде не кажется мне слишком полезным прямо сейчас.
Теперь, в моем CmakeLists.txt, я (пытаюсь) скомпилировать проект с флагами отладки, например так:
set(CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb -O0")
это правильный способ сделать это?
Я что-то здесь не так делаю?
Спасибо, и извините за такой длинный вопрос!:/
1 ответ
Обычная процедура заключается в установке CMAKE_BUILD_TYPE
переменная к Debug
, Release
и т. д. на этапе настройки. Это может быть достигнуто с помощью -D
флаг для командной строки cmake
инструмент, или путем изменения соответствующего поля в графическом интерфейсе.
Если вы хотите передать дополнительные флаги компилятору, просто установите CMAKE_CXX_FLAGS
так же, как вы установили CMAKE_BUILD_TYPE
,
Как вы видите, это не затрагивает изменение любого из CMakeLists.txt
файлы, но CMakeCache.txt
в вашей сборке реж.