2012-09-27 3 views
1

프로젝트를 C++ 및 QML로 작성하고 Valgrind를 사용하여 메모리 누수를 조사하려고 시도했지만 응용 프로그램이 다음과 같이 가장 단순한 경우에도 많은 오류가 표시됩니다.Valgrind는 간단한 QML 응용 프로그램의 많은 경고/오류를 보여줍니다.

#include <QtGui/QApplication> 
#include "qmlapplicationviewer.h" 
Q_DECL_EXPORT int main(int argc, char *argv[]) 
{ 
    QScopedPointer<QApplication> app(createApplication(argc, argv)); 
    QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create()); 
    viewer->setOrientation(QmlApplicationViewer::ScreenOrientationAuto); 
    viewer->setMainQmlFile(QLatin1String("qml/Interface/main2.qml")); 
    viewer->showExpanded(); 
    return app->exec(); 
} 

QML 파일은 다음과 같습니다

valgrind -v --leak-check=full --show-reachable=yes --track-origins=yes --log-file=Interface2.valgrind.log ./Interface2 
: 나는 명령을 사용하여 Valgrind의를 실행 해요

import QtQuick 1.0 
Rectangle { 
    width: 800 
    height: 480 
    color: "blue" 
    MouseArea { 
     anchors.fill: parent 
     onClicked: Qt.quit() 
    } 
} 

Valgrind의 요약은 말한다 : 아래

==16840== LEAK SUMMARY: 
==16840== definitely lost: 344 bytes in 2 blocks 
==16840== indirectly lost: 20 bytes in 1 blocks 
==16840==  possibly lost: 9,935 bytes in 308 blocks 
==16840== still reachable: 133,085 bytes in 2,234 blocks 
==16840==   suppressed: 0 bytes in 0 blocks 

은 몇 Valgrind의에서 얻은 메시지 (약 3000 로그 라인의) :

==16840== Memcheck, a memory error detector 
==16840== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al. 
==16840== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info 
==16840== Command: ./Interface2 
==16840== Parent PID: 13367 
==16840== 
--16840-- 
--16840-- Valgrind options: 
--16840-- --suppressions=/usr/lib/valgrind/debian-libc6-dbg.supp 
--16840-- -v 
--16840-- --leak-check=full 
--16840-- --show-reachable=yes 
--16840-- --track-origins=yes 
--16840-- --log-file=Interface2.valgrind.log 
--16840-- Contents of /proc/version: 
--16840-- Linux version 2.6.32-43-generic ([email protected]) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)) #97-Ubuntu SMP Wed Sep 5 16:43:09 UTC 2012 
--16840-- Arch and hwcaps: X86, x86-sse1-sse2 
--16840-- Page sizes: currently 4096, max supported 4096 
--16840-- Valgrind library directory: /usr/lib/valgrind 
--16840-- Reading syms from /lib/ld-2.11.1.so (0x4000000) 
--16840-- Reading debug info from /lib/ld-2.11.1.so .. 
--16840-- .. CRC mismatch (computed 1f70923a wanted 671e42e8) 
--16840-- Reading debug info from /usr/lib/debug/lib/ld-2.11.1.so .. 
--16840-- Reading syms from /root/workspace/CC5/AIO_CC5/Tools/Interface/Interface2 (0x8048000) 
--16840-- Reading syms from /usr/lib/valgrind/memcheck-x86-linux (0x38000000) 
--16840-- object doesn't have a dynamic symbol table 
--16840-- Reading suppressions file: /usr/lib/valgrind/debian-libc6-dbg.supp 
--16840-- Reading suppressions file: /usr/lib/valgrind/default.supp 
--16840-- REDIR: 0x4016100 (index) redirected to 0x3803e9b3 (vgPlain_x86_linux_REDIR_FOR_index) 
--16840-- Reading syms from /usr/lib/valgrind/vgpreload_core-x86-linux.so (0x401f000) 
--16840-- Reading syms from /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so (0x4022000) 
==16840== 148 (128 direct, 20 indirect) bytes in 1 blocks are definitely lost in loss record 133 of 200 
==16840== at 0x4024F20: malloc (vg_replace_malloc.c:236) 
==16840== by 0x60438C1: ??? (in /usr/lib/libfontconfig.so.1.4.4) 
==16840== by 0x60443C4: ??? (in /usr/lib/libfontconfig.so.1.4.4) 
==16840== by 0x60444D9: ??? (in /usr/lib/libfontconfig.so.1.4.4) 
==16840== by 0x6048876: ??? (in /usr/lib/libfontconfig.so.1.4.4) 
==16840== by 0x60493C0: ??? (in /usr/lib/libfontconfig.so.1.4.4) 
==16840== by 0x61CACFD: ??? (in /lib/libexpat.so.1.5.2) 
==16840== by 0x61CBBC0: ??? (in /lib/libexpat.so.1.5.2) 
==16840== by 0x61CD412: ??? (in /lib/libexpat.so.1.5.2) 
==16840== by 0x61CDCD9: ??? (in /lib/libexpat.so.1.5.2) 
==16840== by 0x61C6F02: XML_ParseBuffer (in /lib/libexpat.so.1.5.2) 
==16840== by 0x604724A: FcConfigParseAndLoad (in /usr/lib/libfontconfig.so.1.4.4) 


==16840== 216 bytes in 1 blocks are definitely lost in loss record 137 of 200 
==16840== at 0x4024F20: malloc (vg_replace_malloc.c:236) 
==16840== by 0x60CE9D2: _XimOpenIM (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x60CE817: _XimRegisterIMInstantiateCallback (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x60B1D77: XRegisterIMInstantiateCallback (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x4BF6A51: ??? (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 
==16840== by 0x4BF4500: QInputContextFactory::create(QString const&, QObject*) (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 
==16840== by 0x4551C2C: QApplication::inputContext() const (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 
==16840== by 0x459DEA6: QWidgetPrivate::inputContext() const (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 
==16840== by 0x45A9E03: QWidget::setAttribute(Qt::WidgetAttribute, bool) (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 
==16840== by 0x4C65E0B: QGraphicsViewPrivate::updateInputMethodSensitivity() (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 
==16840== by 0x4C7185E: QGraphicsView::setScene(QGraphicsScene*) (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 
==16840== by 0x40A5A06: ??? (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtDeclarative.so.4.7.4) 


==16840== 256 bytes in 1 blocks are still reachable in loss record 143 of 200 
==16840== at 0x4025016: realloc (vg_replace_malloc.c:525) 
==16840== by 0x602ED60: FcBlanksAdd (in /usr/lib/libfontconfig.so.1.4.4) 
==16840== by 0x60495CB: ??? (in /usr/lib/libfontconfig.so.1.4.4) 
==16840== by 0x61CACFD: ??? (in /lib/libexpat.so.1.5.2) 
==16840== by 0x61CBBC0: ??? (in /lib/libexpat.so.1.5.2) 
==16840== by 0x61CD412: ??? (in /lib/libexpat.so.1.5.2) 
==16840== by 0x61CDCD9: ??? (in /lib/libexpat.so.1.5.2) 
==16840== by 0x61C6F02: XML_ParseBuffer (in /lib/libexpat.so.1.5.2) 
==16840== by 0x604724A: FcConfigParseAndLoad (in /usr/lib/libfontconfig.so.1.4.4) 
==16840== by 0x603D091: FcInitLoadConfig (in /usr/lib/libfontconfig.so.1.4.4) 
==16840== by 0x603D19B: FcInitLoadConfigAndFonts (in /usr/lib/libfontconfig.so.1.4.4) 
==16840== by 0x603D29C: FcInit (in /usr/lib/libfontconfig.so.1.4.4) 




==16840== 360 bytes in 3 blocks are possibly lost in loss record 144 of 200 
==16840== at 0x4024106: memalign (vg_replace_malloc.c:581) 
==16840== by 0x4024163: posix_memalign (vg_replace_malloc.c:709) 
==16840== by 0x5E9C9C1: slab_allocator_alloc_chunk (gslice.c:1148) 
==16840== by 0x5E9D222: g_slice_alloc (gslice.c:678) 
==16840== by 0x5E9E881: g_slist_prepend (gslist.c:273) 
==16840== by 0x5EA1A94: g_strsplit (gstrfuncs.c:2431) 
==16840== by 0x5EB5731: g_get_language_names (gutils.c:3169) 
==16840== by 0x5EA9B49: g_thread_init_glib (gthread.c:940) 
==16840== by 0x5E3F69D: g_thread_init (gthread-impl.c:360) 
==16840== by 0x50FC7D9: QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(_GMainContext*) (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtCore.so.4.7.4) 
==16840== by 0x460CB4C: ??? (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 
==16840== by 0x460CC32: ??? (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 


==16840== 16,352 bytes in 2 blocks are still reachable in loss record 199 of 200 
==16840== at 0x4024F20: malloc (vg_replace_malloc.c:236) 
==16840== by 0x6098833: ??? (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x6098CA6: _XrmInternalStringToQuark (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x609F4C5: XStringToKeysym (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x60D2849: _XimParseStringFile (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x60D0466: _XimLocalOpenIM (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x60CEB3C: _XimOpenIM (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x60CE817: _XimRegisterIMInstantiateCallback (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x60B1D77: XRegisterIMInstantiateCallback (in /usr/lib/libX11.so.6.3.0) 
==16840== by 0x4BF6A51: ??? (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 
==16840== by 0x4BF4500: QInputContextFactory::create(QString const&, QObject*) (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 
==16840== by 0x4551C2C: QApplication::inputContext() const (in /opt/QtSDK/Desktop/Qt/474/gcc/lib/libQtGui.so.4.7.4) 

질문 : 내가 없애해야 할 일 응용 프로그램에서 메모리 누수 오류가 발생했습니다. 이것은 버그가 많은 라이브러리의 문제입니까? Qt 공식 사이트의 설치 프로그램을 사용하여 설치했습니다.

감사합니다.

답변

1

버그가있는 라이브러리의 문제인 것처럼 보입니다. 그렇습니다. 당신은 당신이 Qt를에서 leakiness으로 추적 할 수 생각한다면, 나는 확실히 그들과 함께 버그로보고 할 것 : 말했다 http://qt-project.org/wiki/ReportingBugsInQt

, 나는 QScopedPointer의 사용은 매우 흥미로운 생각합니다. 왜 단순히 스택에 애플리케이션을 할당하지 않는가? 이처럼 : 나는 가능성을 생각하지 않는다 않습니다 :)

을 어쨌든)

QApplication app(argc, argv); 

나는 당신의 QmlApplicationViewer 포인터에 대해 같은 말 것,하지만 난 QmlApplicationViewer는 :: (만들 것을 볼 수있는 것 당신을 위해 누수를 해결 ...

+0

감사. QScopedPointers를 제거했지만 말한대로 - 도움이되지 않습니다. 이미 버그를 게시했습니다. – kappa

관련 문제