2012-07-07 4 views
0

좋아, 그럼 내가 디버그하려고 애 쓰고있는이 Qt 애플리케이션이있다. 거기에 Valgrind의를 실행하고 출력을 파일로 리디렉션에 따라 , 나는 나를 슬프게 같은 것을 봐 많은 일부 '확실히 손실'블록 참조 :디버깅을위한 Cmake 플래그가 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") 

이 작업을 수행하는 적절한 방법입니까?

여기 뭔가 잘못 되었나요?

감사합니다. 그런 긴 질문에 대해 사과드립니다. :/

답변

0

일반적인 절차는 구성 단계 중에 Debug, Release 또는 기타 등등 변수를 CMAKE_BUILD_TYPE으로 설정하는 것입니다. 명령 줄 cmake 도구에 -D 플래그를 사용하거나 GUI에서 해당 필드를 수정하여이 작업을 수행 할 수 있습니다.

컴파일러에 여분의 플래그를 전달하려면 CMAKE_BUILD_TYPE과 동일한 방법으로 CMAKE_CXX_FLAGS을 설정하면됩니다.

위에서 보았 듯이 CMakeLists.txt 개 파일을 수정하지는 않지만 빌드 디렉토리에 CMakeCache.txt 개를 수정해야합니다.