This is a nicely self-contained task for newcomers. It requires some knowledge about GDB's pretty-printing infrastructure, which is relatively easy to learn, though. There are tests in KDevelop.git/debuggers/gdb/printers/ which should be compiled against Qt5 and then invoked via the 'qtprinters' test. I don't know the exact state of the pretty-printers' support regarding Qt5, but the printer for QMap for example is definitely not working (QMap got rewritten during the Qt4->Qt5 transition). Reproducible: Always
Git commit 05cf7a8d5eb7b8baea7646910eea17059e5a75e4 by Kevin Funk. Committed on 12/02/2014 at 14:10. Pushed by kfunk into branch 'master'. Pretty-printers: Quickfix for QMap from Qt5 Unfortunately if one of the printers for a member fails, the complete class cannot be displayed in the debugger. So let's just fall back to the default printer in case we do not support the type (here: QMap from Qt5) M +12 -0 debuggers/gdb/printers/helper.py M +6 -1 debuggers/gdb/printers/qt4.py http://commits.kde.org/kdevelop/05cf7a8d5eb7b8baea7646910eea17059e5a75e4
Current status: ********* Start testing of GDBDebugger::QtPrintersTest ********* Config: Using QtTest library 5.2.0, Qt 5.2.0 PASS : GDBDebugger::QtPrintersTest::initTestCase() PASS : GDBDebugger::QtPrintersTest::testQString() QDEBUG : GDBDebugger::QtPrintersTest::testQByteArray() "Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: $1 = " FAIL! : GDBDebugger::QtPrintersTest::testQByteArray() Unexpected Python Exception Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(87)] FAIL! : GDBDebugger::QtPrintersTest::testQByteArray() 'out.contains("\"test byte array\"")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(115)] FAIL! : GDBDebugger::QtPrintersTest::testQListContainer(QList) 'out.contains("[0] = {\n first = 1, \n second = 2\n }")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(241)] FAIL! : GDBDebugger::QtPrintersTest::testQListContainer(QQueue) 'out.contains("[0] = {\n first = 1, \n second = 2\n }")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(241)] QDEBUG : GDBDebugger::QtPrintersTest::testQListContainer(QVector) "Python Exception <class 'gdb.error'> There is no member or method named p.: $1 = empty QVector<int>" FAIL! : GDBDebugger::QtPrintersTest::testQListContainer(QVector) Unexpected Python Exception Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(87)] QDEBUG : GDBDebugger::QtPrintersTest::testQListContainer(QVector) "Python Exception <class 'gdb.error'> There is no member or method named p.: $2 = QVector<int>" FAIL! : GDBDebugger::QtPrintersTest::testQListContainer(QVector) Unexpected Python Exception Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(87)] FAIL! : GDBDebugger::QtPrintersTest::testQListContainer(QVector) 'out.contains("[0] = 10")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(150)] QDEBUG : GDBDebugger::QtPrintersTest::testQListContainer(QStack) "Python Exception <class 'gdb.error'> There is no member or method named p.: $1 = empty QStack<int>" FAIL! : GDBDebugger::QtPrintersTest::testQListContainer(QStack) Unexpected Python Exception Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(87)] QDEBUG : GDBDebugger::QtPrintersTest::testQListContainer(QStack) "Python Exception <class 'gdb.error'> There is no member or method named p.: $2 = QStack<int>" FAIL! : GDBDebugger::QtPrintersTest::testQListContainer(QStack) Unexpected Python Exception Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(87)] FAIL! : GDBDebugger::QtPrintersTest::testQListContainer(QStack) 'out.contains("[0] = 10")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(150)] PASS : GDBDebugger::QtPrintersTest::testQListContainer(QLinkedList) PASS : GDBDebugger::QtPrintersTest::testQListContainer(QSet) FAIL! : GDBDebugger::QtPrintersTest::testQMapInt() 'out.contains("[10] = 100")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(259)] FAIL! : GDBDebugger::QtPrintersTest::testQMapString() 'out.contains("[\"10\"] = \"100\"")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(273)] FAIL! : GDBDebugger::QtPrintersTest::testQMapStringBool() 'out.contains("[\"10\"] = true")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(287)] PASS : GDBDebugger::QtPrintersTest::testQDate() PASS : GDBDebugger::QtPrintersTest::testQTime() FAIL! : GDBDebugger::QtPrintersTest::testQDateTime() 'out.contains("2010-01-20 15:31:13")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(319)] QDEBUG : GDBDebugger::QtPrintersTest::testQUrl() "Python Exception <class 'gdb.error'> cannot resolve overloaded method `data': no arguments supplied: $1 = " FAIL! : GDBDebugger::QtPrintersTest::testQUrl() Unexpected Python Exception Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(87)] FAIL! : GDBDebugger::QtPrintersTest::testQUrl() 'out.contains("http://www.kdevelop.org/foo")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(328)] PASS : GDBDebugger::QtPrintersTest::testQHashInt() FAIL! : GDBDebugger::QtPrintersTest::testQHashString() 'out.contains("[\"20\"] = \"200\"")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(351)] PASS : GDBDebugger::QtPrintersTest::testQSetInt() FAIL! : GDBDebugger::QtPrintersTest::testQSetString() 'out.contains("] = \"20\"")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(377)] PASS : GDBDebugger::QtPrintersTest::testQChar() PASS : GDBDebugger::QtPrintersTest::testQListPOD() PASS : GDBDebugger::QtPrintersTest::testQUuid() PASS : GDBDebugger::QtPrintersTest::testKTextEditorTypes() FAIL! : GDBDebugger::QtPrintersTest::testKDevelopTypes() 'gdb.execute("print path1").contains("(\"tmp\", \"foo\")")' returned FALSE. () Loc: [/home/krf/devel/src/kf5/kdevelop/debuggers/gdb/printers/tests/qtprinters.cpp(438)] PASS : GDBDebugger::QtPrintersTest::cleanupTestCase() Totals: 13 passed, 19 failed, 0 skipped ********* Finished testing of GDBDebugger::QtPrintersTest *********
I am new here but would like to take this on. Could you please let me know where to begin.
There's some ongoing discussion on https://codereview.qt-project.org/#/c/87052/. Using the files provided by this patch would actually fix this. I suggest having a look at another junior job in KDevelop land: https://bugs.kde.org/buglist.cgi?cmdtype=runnamed&namedcmd=KDevelop%20junior%20jobs Feel free to join #kdevelop at Freenode, so we can discuss.
Alex Merry postponed work on the Qt 5 pretty printers. Those printers are also partially (?) incompatible with Qt 4. For convenience I have quickly put the three needed files in a single repo at https://github.com/Lekensteyn/qt5printers (I have no intention to work further on these printers for now). Don't forget to update the wiki at https://techbase.kde.org/Development/Tutorials/Debugging/Debugging_with_GDB!
What stills need to be done in this? and what already has been done?I would like to take this up if there is any work that needs to be done here
Git commit 60230b74acfcaa0428d3405352c4b069e94a9609 by Milian Wolff. Committed on 07/03/2016 at 20:40. Pushed by mwolff into branch '5.0'. Port pretty printers to Qt 5 and reenable unit test. This probably won't work perfectly on stripped builds where we don't have any debug symbols, but at least we can now print stuff in debug builds. M +1 -1 debuggers/gdb/printers/CMakeLists.txt M +4 -4 debuggers/gdb/printers/gdbinit R +3 -3 debuggers/gdb/printers/kde.py [from: debuggers/gdb/printers/kde4.py - 094% similarity] R +101 -31 debuggers/gdb/printers/qt.py [from: debuggers/gdb/printers/qt4.py - 081% similarity] M +5 -6 debuggers/gdb/printers/tests/CMakeLists.txt M +23 -12 debuggers/gdb/printers/tests/qtprinters.cpp http://commits.kde.org/kdevelop/60230b74acfcaa0428d3405352c4b069e94a9609