On terça-feira, 27 de março de 2012 15.44.06, Rui Maciel wrote: > On 03/27/2012 02:51 PM, Quim Gil wrote: > > I will include tohttp://qt-project.org/wiki/Qt-is-Good what is not > > already there. > > I've noticed that the article includes the following sentence: > > <quote> > All the source code of the Qt libraries is open source and well written > with good API references. > </quote> > > > I would take some precautions in claiming that it is "well written". > Not that it is poorly written. It isn't. Yet, when a Qt app is ran > under a code profiler such as valgrind, a lengthy set of warnings is > displayed regarding a series of invalid memory accesses and conditional > jumps or moves depending on uninitialised values. > > Granted, maybe this problem is distro-specific, and not related to Qt > per se. Is anyone else willing to test this?
I constantly run Qt apps under valgrind. The results are usually either false positives or not Qt's fault. Not always -- I've just caught one failure in Qt 4.8 that I can't attribute to any outside source -- but often enough. For example, $ valgrind designer Invalid read of size 4 at 0x32C9408083: ??? (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C940A447: FcConfigFilename (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C941D965: FcConfigParseAndLoad (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C94130C6: FcInitLoadConfig (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C94131B5: FcInitLoadConfigAndFonts (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C94133D4: FcInit (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C940882C: FcConfigGetCurrent (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C9413225: FcInitBringUptoDate (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C941582F: FcFontList (in /usr/lib64/libfontconfig.so.1.4.4) by 0xED80C4B: QFontconfigDatabase::populateFontDatabase() (qfontconfigdatabase.cpp:335) by 0x6F3A2EB: initializeDb() (qfontdatabase_qpa.cpp:137) by 0x6F3ABBF: QFontDatabase::findFont(int, QFontPrivate const*, QFontDef const&, bool) (qfontdatabase_qpa.cpp:277) Address 0x1151a794 is 20 bytes inside a block of size 22 alloc'd at 0x4A074CD: malloc (vg_replace_malloc.c:236) by 0x32C9407FDC: ??? (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C940A447: FcConfigFilename (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C941D965: FcConfigParseAndLoad (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C94130C6: FcInitLoadConfig (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C94131B5: FcInitLoadConfigAndFonts (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C94133D4: FcInit (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C940882C: FcConfigGetCurrent (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C9413225: FcInitBringUptoDate (in /usr/lib64/libfontconfig.so.1.4.4) by 0x32C941582F: FcFontList (in /usr/lib64/libfontconfig.so.1.4.4) by 0xED80C4B: QFontconfigDatabase::populateFontDatabase() (qfontconfigdatabase.cpp:335) by 0x6F3A2EB: initializeDb() (qfontdatabase_qpa.cpp:137) FontConfig's fault [more FontConfig failures skipped] Invalid read of size 8 at 0x32C4136C74: __strspn_sse42 (smmintrin.h:628) by 0x13ECDEC2: parseValue (xmlconfig.c:304) by 0x13ECEFF7: optInfoStartElem (xmlconfig.c:366) by 0x32C7C0AAF2: ??? (in /lib64/libexpat.so.1.5.2) by 0x32C7C0B8CD: ??? (in /lib64/libexpat.so.1.5.2) by 0x32C7C0878E: ??? (in /lib64/libexpat.so.1.5.2) by 0x32C7C0A11A: ??? (in /lib64/libexpat.so.1.5.2) by 0x32C7C0D6E1: XML_ParseBuffer (in /lib64/libexpat.so.1.5.2) by 0x13ECF9AB: driParseOptionInfo (xmlconfig.c:726) by 0x13E5010C: intelInitScreen2 (intel_screen.c:699) by 0x13ECD8EA: dri2CreateNewScreen (dri_util.c:85) by 0x7C791EE: dri2CreateScreen (dri2_glx.c:1069) Address 0x85dd3e0 is 0 bytes inside a block of size 4 alloc'd at 0x4A074CD: malloc (vg_replace_malloc.c:236) by 0x13ECEEDB: optInfoStartElem (xmlconfig.c:343) by 0x32C7C0AAF2: ??? (in /lib64/libexpat.so.1.5.2) by 0x32C7C0B8CD: ??? (in /lib64/libexpat.so.1.5.2) by 0x32C7C0878E: ??? (in /lib64/libexpat.so.1.5.2) by 0x32C7C0A11A: ??? (in /lib64/libexpat.so.1.5.2) by 0x32C7C0D6E1: XML_ParseBuffer (in /lib64/libexpat.so.1.5.2) by 0x13ECF9AB: driParseOptionInfo (xmlconfig.c:726) by 0x13E5010C: intelInitScreen2 (intel_screen.c:699) by 0x13ECD8EA: dri2CreateNewScreen (dri_util.c:85) by 0x7C791EE: dri2CreateScreen (dri2_glx.c:1069) by 0x7C524C8: __glXInitialize (glxext.c:780) Probably a false positive, given the function name (SSE4.2 string function). See below for a similar in Qt. By the way, valgrind reports an 8-byte load, but it's actually a 16-byte load. Syscall param ioctl(generic) points to uninitialised byte(s) at 0x32C40E9CE7: ioctl (syscall-template.S:82) by 0x80F9787: drmIoctl (xf86drm.c:167) by 0x1488CDF8: drm_intel_bufmgr_gem_init (intel_bufmgr_gem.c:2362) by 0x13E50246: intelInitScreen2 (intel_screen.c:598) by 0x13ECD8EA: dri2CreateNewScreen (dri_util.c:85) by 0x7C791EE: dri2CreateScreen (dri2_glx.c:1069) by 0x7C524C8: __glXInitialize (glxext.c:780) by 0x7C4E376: glXGetFBConfigs (glxcmds.c:1665) by 0x7C4F307: glXChooseFBConfig (glxcmds.c:1625) by 0xED83F79: qglx_findConfig(_XDisplay*, int, QSurfaceFormat const&, int) (qglxconvenience.cpp:124) by 0xED841D8: qglx_findVisualInfo(_XDisplay*, int, QSurfaceFormat*) (qglxconvenience.cpp:169) by 0xED643DA: QXcbWindow::create() (qxcbwindow.cpp:215) Address 0x7feffe3e4 is on thread 1's stack False positive or intel driver's fault. Invalid read of size 8 at 0x6E374CB: qt_blend_argb32_on_argb32_ssse3(unsigned char*, int, unsigned char const*, int, int, int, int) (emmintrin.h:679) by 0x705CA4E: QRasterPaintEnginePrivate::drawImage(QPointF const&, QImage const&, void (*)(unsigned char*, int, unsigned char const*, int, int, int, int), QRect const&, int, QRect const&) (qpaintengine_raster.cpp:996) by 0x7062CB0: QRasterPaintEngine::drawImage(QPointF const&, QImage const&) (qpaintengine_raster.cpp:2109) by 0x7061CB6: QRasterPaintEngine::drawPixmap(QPointF const&, QPixmap const&) (qpaintengine_raster.cpp:1984) by 0x708168B: QPainter::drawPixmap(QPointF const&, QPixmap const&) (qpainter.cpp:5074) by 0x5E8717D: QPainter::drawPixmap(QPoint const&, QPixmap const&) (qpainter.h:778) by 0x5F3764A: QPlastiqueStyle::drawPrimitive(QStyle::PrimitiveElement, QStyleOption const*, QPainter*, QWidget const*) const (qplastiquestyle.cpp:1493) by 0x609962D: QToolBar::paintEvent(QPaintEvent*) (qtoolbar.cpp:1052) by 0x5E7DF08: QWidget::event(QEvent*) (qwidget.cpp:8014) by 0x6099C1F: QToolBar::event(QEvent*) (qtoolbar.cpp:1203) by 0x5E23D9F: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:3628) by 0x5E23AA5: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3593) Address 0x1100ffe8 is 1,112 bytes inside a block of size 1,116 alloc'd at 0x4A074CD: malloc (vg_replace_malloc.c:236) by 0x6ECE847: QImageData::create(QSize const&, QImage::Format, int) (qimage.cpp:170) by 0x6ECED87: QImage::QImage(int, int, QImage::Format) (qimage.cpp:742) by 0x6F02592: QRasterPlatformPixmap::resize(int, int) (qpixmap_raster.cpp:106) by 0x6EFE31D: QPlatformPixmap::create(int, int, QPlatformPixmap::PixelType) (qplatformpixmap.cpp:55) by 0x6EF5A0E: QPixmap::doInit(int, int, int) (qpixmap.cpp:97) by 0x6EF5C08: QPixmap::QPixmap(QSize const&) (qpixmap.cpp:154) by 0x5F3717B: QPlastiqueStyle::drawPrimitive(QStyle::PrimitiveElement, QStyleOption const*, QPainter*, QWidget const*) const (qplastiquestyle.cpp:1462) by 0x609962D: QToolBar::paintEvent(QPaintEvent*) (qtoolbar.cpp:1052) by 0x5E7DF08: QWidget::event(QEvent*) (qwidget.cpp:8014) by 0x6099C1F: QToolBar::event(QEvent*) (qtoolbar.cpp:1203) by 0x5E23D9F: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:3628) False positive. The code intentionally loads more bytes than it needs because it will discard them and it will not cause a page fault. Conditional jump or move depends on uninitialised value(s) at 0x6E33763: double const& qMax<double>(double const&, double const&) (in /home/thiago/obj/qt/qt5/qtbase/lib/libQtGui.so.5.0.0) by 0x707A2AE: QPainter::setOpacity(double) (qpainter.cpp:2092) by 0x5707BFA: qdesigner_internal::IconButton::paintEvent(QPaintEvent*) (filterwidget.cpp:90) by 0x5E7DF08: QWidget::event(QEvent*) (qwidget.cpp:8014) by 0x5FA69AA: QAbstractButton::event(QEvent*) (qabstractbutton.cpp:1089) by 0x60A4BBE: QToolButton::event(QEvent*) (qtoolbutton.cpp:960) by 0x5E23D9F: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:3628) by 0x5E23AA5: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3593) by 0x76F2C49: QCoreApplication::notifyInternal(QObject*, QEvent*) (qcoreapplication.cpp:694) by 0x5E25F5A: QCoreApplication::sendSpontaneousEvent(QObject*, QEvent*) (in /home/thiago/obj/qt/qt5/qtbase/lib/libQtWidgets.so.5.0.0) by 0x5E75538: QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (qwidget.cpp:5115) by 0x5E7658B: QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (qwidget.cpp:5302) Uninitialised value was created by a heap allocation at 0x4A06FC7: operator new(unsigned long) (vg_replace_malloc.c:261) by 0x570817A: qdesigner_internal::FilterWidget::FilterWidget(QWidget*, qdesigner_internal::FilterWidget::LayoutMode) (filterwidget.cpp:161) by 0x56F1902: QtResourceView::QtResourceView(QDesignerFormEditorInterface*, QWidget*) (qtresourceview.cpp:605) by 0x4C9C3B6: QDesignerComponents::createResourceEditor(QDesignerFormEditorInterface*, QWidget*) (qdesigner_components.cpp:248) by 0x43B103: ResourceEditorToolWindow::ResourceEditorToolWindow(QDesignerWorkbench*) (qdesigner_toolwindow.cpp:323) by 0x43B9D4: QDesignerToolWindow::createStandardToolWindow(QDesignerToolWindow::StandardToolWindow, QDesignerWorkbench*) (qdesigner_toolwindow.cpp:422) by 0x43EE3F: QDesignerWorkbench::QDesignerWorkbench() (qdesigner_workbench.cpp:223) by 0x438CAA: QDesigner::initialize() (qdesigner.cpp:241) by 0x437854: QDesigner::QDesigner(int&, char**) (qdesigner.cpp:98) by 0x4375B7: main (main.cpp:54) The true positive I said I had found. Also happens in Qt 4.8. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest