Qt Creator Debugging Issue for Colibri i.MX7D

We are having an issue with debugging using Qt Creator and Qt5. There is another forum post where someone is having exactly the same issue that we are. There appears to be an issue with Python not being built into the GDB debugger.

Here’s the community forum post that I’m referring to:

Debugging QT project on Col VF61

I am not familiar with building the GDB debugger with Python. I followed this document to configure our Qt Creator development environment:

How to set up Qt Creator to cross compile for embedded Linux

Does anyone have an idea of what we will need to do to resolve this issue?

Thank You

Can you add your exact output from the debugging window plus Software version information (BSP, Qt Creator and host distribution).

This bug report and the answers to it suggests that this might non-fatal:
https://bugreports.qt.io/browse/QTCREATORBUG-11483

Hello stefan.tx,

Thank you for linking the bug report. It is helpful. Our concern is not that the bug is fatal. It’s that we can’t debug our application at all because of this issue. We have an application that I’ve been porting from a different project to the Colibri i.MX7D V1.1B that we are using. The ported project will now build successfully. I can also deploy the application down to the embedded Linux OS we are running on the Colibri i.MX7D and run it, but the main screen in the application does not appear to load and the application crashes. Because the debugger is not working in Qt Creator I cannot easily step through the source code to determine what is going on. I could add print statements to the code as output to figure out where things stop working, but this is not the best solution, getting the debugger working is.

Here is the information that you asked for:

BSP: Version 2.7 (morty)

Qt Creator: 4.0.2 (I attached a screen image of the About Qt Creator dialog box to provide additional information)

Linux Host Distribution: Ubuntu 14.04.5 LTS (trusty)

Output from debugging window:

Starting debugger "GdbEngine" for ABI "arm-linux-generic-elf-32bit"...
dStart parameters: 'T200_Linux_Colibri-iMX7D (on Remote Device)' mode: 6
dABI: arm-linux-generic-elf-32bit
dLanguages: c++ 
dExecutable: /opt/bin/T200_Linux_Colibri-iMX7D 
dDebugger: /usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gdb
dProject: /home/carloval/Development/New_Products/Colibri/iMX7D/A7_0/Application/TXXXX_Colibri-iMX7DAddtional Search Directories:
dRemote: 169.254.70.18:-1
dSysroot: /usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi
dDebug Source Location: 
dDebugger settings: 
dShowStandardNamespace: true  (default: true)
dMaximalStackDepth: 20  (default: 20)
dSortStructMembers: true  (default: true)
dAutoDerefPointers: true  (default: true)
dShowQtNamespace: true  (default: true)
dShowQObjectNames: false  (default: false)
dSkipKnownFrames: false  (default: false)
dEnableReverseDebugging: false  (default: false)
dMaximalStringLength: 10000  (default: 10000)
dDisplayStringLimit: 100  (default: 100)
dSelectedPluginBreakpoints: false  (default: false)
dAdjustBreakpointLocations: true  (default: true)
dAllPluginBreakpoints: true  (default: true)
dFontSizeFollowsEditor: false  (default: false)
dUseMessageBoxForSignals: true  (default: true)
dUseAlternatingRowColours: false  (default: false)
dLogTimeStamps: false  (default: false)
dAutoQuit: false  (default: false)
dSwitchModeOnExit: false  (default: false)
dBreakpointsFullPath: false  (default: false)
dCloseBuffersOnExit: false  (default: false)
dCloseMemoryBuffersOnExit: true  (default: true)
dUseDebuggingHelper: true  (default: true)
dUseCodeModel: true  (default: true)
dRaiseOnInterrupt: true  (default: true)
dStationaryEditorWhileStepping: false  (default: false)
dUseToolTipsInLocalsView: false  (default: false)
dUseToolTipsInBreakpointsView: false  (default: false)
dShowThreadNames: false  (default: false)
dUseToolTips: true  (default: true)
dUseAddressInStackView: false  (default: false)
dUseToolTipsInBreakpointsView: false  (default: true)  ***
dUseAddressInBreakpointsView: false  (default: false)
dGdbCustomDumperCommands:   (default: )
dAdditionalArguments:   (default: )
dAlwaysAdjustColumnWidths: true  (default: true)
dExtraDumperFile:   (default: )
dBreakEvent:   (default: )
dBreakOnCrtDbgReport: false  (default: false)
dSymbolPaths:   (default: )
dSourcePaths:   (default: )
dBreakOnThrow: false  (default: false)
dBreakOnCatch: false  (default: false)
dNoPluginBreakpoints: false  (default: false)
dSelectedPluginBreakpointsPattern: .*  (default: .*)
dBreakOnAbort: false  (default: false)
dShowQmlObjectTree: true  (default: true)
dBreakOnWarning: false  (default: false)
dBreakOnFatal: false  (default: false)
dQmlInspector.ShowAppOnTop: false  (default: false)
dIgnoreFirstChanceAccessViolation: false  (default: false)
dLoadGdbInit: true  (default: true)
dCDB_Console: false  (default: false)
dBreakpointCorrection: true  (default: true)
dGdbStartupCommands:   (default: )
dGdbPostAttachCommands:   (default: )
dLoadGdbDumpers2: false  (default: false)
dAttemptQuickStart: false  (default: false)
dUseDynamicType: true  (default: true)
dTargetAsync: false  (default: false)
dWatchdogTimeout: 20  (default: 20)
dAutoEnrichParameters: true  (default: true)
dIntelFlavor: false  (default: false)
dIdentifyDebugInfoPackages: false  (default: false)
dWarnOnReleaseBuilds: true  (default: true)
dMultiInferior: false  (default: false)
dState changed from DebuggerNotReady(0) to EngineSetupRequested(1) [master]
dQUEUE: SETUP ENGINE
dCALL: SETUP ENGINE
dEXAMINING /home/carloval/Development/New_Products/Colibri/iMX7D/A7_0/Application/TXXXX_Colibri-iMX7D/build-T200_Linux_Colibri-iMX7D-Toradex_Qt_Embedded-Debug/T200_Linux_Colibri-iMX7D
dELF SECTIONS:  .interp .note.ABI-tag .note.gnu.build-id .dynsym .dynstr .gnu.hash .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .ARM.extab .ARM.exidx .eh_frame .eh_frame_hdr .jcr .fini_array .init_array .data.rel.ro .dynamic .data .tm_clone_table .got .bss .comment .debug_aranges .debug_info .debug_abbrev .debug_line .debug_str .debug_ranges .debug_loc .debug_frame .note.gnu.gold-version .ARM.attributes .symtab .strtab .shstrtab 
dTRYING TO START ADAPTER
dNOTE: REQUEST REMOTE SETUP
 Listening on port 10000
dNOTE: REMOTE SETUP DONE: GDB SERVER PORT: 10000  QML PORT -1
dENABLING TEST CASE: 0
dSTARTING /usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gdb -i mi
dGDB STARTED, INITIALIZING IT
<1show version
<2show debug-file-directory
<3set print object on
<4set breakpoint pending on
<5set print elements 10000
<6handle SIGSEGV nopass stop print
<7set unwindonsignal on
<8set width 0
<9set height 0
sSetting up inferior...
<10set sysroot /usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi
<11set substitute-path /usr/src /usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/usr/src
<12-interpreter-exec console "set auto-solib-add on"
<13python sys.path.insert(1, '/home/carloval/Qt5.7.0/Tools/QtCreator/share/qtcreator/debugger/')
<14python sys.path.append('/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/data-directory/python')
<15python from gdbbridge import *
<16python theDumper.loadDumpers({"token":16})
>=thread-group-added,id="i1"
>~"GNU gdb (Linaro GDB) 7.8-2014.09\n"
>~"Copyright (C) 2014 Free Software Foundation, Inc.\n"
>~"License GPLv3+: GNU GPL version 3 or later \nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.  Type \"show copying\"\nand \"show warranty\" for details.\n"
>~"This GDB was configured as \"--host=x86_64-angstromsdk-linux --target=arm-angstrom-linux-gnueabi\".\nType \"show configuration\" for configuration details."
>~"\nFor bug reporting instructions, please see:\n"
>~".\n"
>~"Find the GDB manual and other documentation resources online at:\n.\n"
>~"For help, type \"help\".\n"
>~"Type \"apropos word\" to search for commands related to \"word\".\n"
>&"show version\n"
>~"GNU gdb (Linaro GDB) 7.8-2014.09\n"
>~"Copyright (C) 2014 Free Software Foundation, Inc.\n"
>~"License GPLv3+: GNU GPL version 3 or later \nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.  Type \"show copying\"\nand \"show warranty\" for details.\n"
>~"This GDB was configured as \"--host=x86_64-angstromsdk-linux --target=arm-angstrom-linux-gnueabi\".\nType \"show configuration\" for configuration details."
>~"\nFor bug reporting instructions, please see:\n"
>~".\n"
>~"Find the GDB manual and other documentation resources online at:\n.\n"
>~"For help, type \"help\".\n"
>~"Type \"apropos word\" to search for commands related to \"word\".\n"
>1^done
dPARSING VERSION: 1^done
dSUPPORTED GDB VERSION GNU gdb (Linaro GDB) 7.8-2014.09
dCopyright (C) 2014 Free Software Foundation, Inc.
dLicense GPLv3+: GNU GPL version 3 or later 
dThis is free software: you are free to change and redistribute it.
dThere is NO WARRANTY, to the extent permitted by law.  Type "show copying"
dand "show warranty" for details.
dThis GDB was configured as "--host=x86_64-angstromsdk-linux --target=arm-angstrom-linux-gnueabi".
dType "show configuration" for configuration details.
dFor bug reporting instructions, please see:
d.
dFind the GDB manual and other documentation resources online at:
d.
dFor help, type "help".
dType "apropos word" to search for commands related to "word".
dGNU gdb (Linaro GDB) 7.8-2014.09
dCopyright (C) 2014 Free Software Foundation, Inc.
dLicense GPLv3+: GNU GPL version 3 or later 
dThis is free software: you are free to change and redistribute it.
dThere is NO WARRANTY, to the extent permitted by law.  Type "show copying"
dand "show warranty" for details.
dThis GDB was configured as "--host=x86_64-angstromsdk-linux --target=arm-angstrom-linux-gnueabi".
dType "show configuration" for configuration details.
dFor bug reporting instructions, please see:
d.
dFind the GDB manual and other documentation resources online at:
d.
dFor help, type "help".
dType "apropos word" to search for commands related to "word".
dUSING GDB VERSION: 70800, BUILD: 2014
<17-interpreter-exec console "set target-async off"
<18-interpreter-exec console "set detach-on-fork off"
>&"show debug-file-directory\n"
>~"The directory where separate debug symbols are searched for is \"/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/lib/arm-angstrom-linux-gnueabi/debug\".\n"
>2^done
>&"set print object on\n"
>=cmd-param-changed,param="print object",value="on"
>3^done
>&"set breakpoint pending on\n"
>=cmd-param-changed,param="breakpoint pending",value="on"
>4^done
>&"set print elements 10000\n"
>=cmd-param-changed,param="print elements",value="10000"
>5^done
>&"handle SIGSEGV nopass stop print\n"
>~"Signal        Stop\tPrint\tPass to program\tDescription\n"
>~"SIGSEGV       Yes\tYes\tNo\t\tSegmentation fault\n"
>6^done
>&"set unwindonsignal on\n"
>=cmd-param-changed,param="unwindonsignal",value="on"
>7^done
>&"set width 0\n"
>=cmd-param-changed,param="width",value="4294967295"
>8^done
>&"set height 0\n"
>9^done
>&"set sysroot /usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi\n"
>=cmd-param-changed,param="sysroot",value="/usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi"
>10^done
>&"set substitute-path /usr/src /usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/usr/src\n"
>11^done
>12^done
>&"python sys.path.insert(1, '/home/carloval/Qt5.7.0/Tools/QtCreator/share/qtcreator/debugger/')\n"
>13^done
>&"python sys.path.append('/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/data-directory/python')\n"
>14^done
>&"python from gdbbridge import *\n"
>&"Traceback (most recent call last):\n"
>&"  File \"\", line 1, in \n"
>&"  File \"/home/carloval/Qt5.7.0/Tools/QtCreator/share/qtcreator/debugger/gdbbridge.py\", line 41, in \n"
>&"    from dumper import *\n"
>&"  File \"/home/carloval/Qt5.7.0/Tools/QtCreator/share/qtcreator/debugger/dumper.py\", line 32, in \n"
>&"    import json\n"
>&"ImportError: No module named 'json'\n"
>&"Error while executing Python code.\n"
>15^error,msg="Error while executing Python code."
>&"python theDumper.loadDumpers({\"token\":16})\n"
>&"Traceback (most recent call last):\n"
>&"  File \"\", line 1, in \n"
>&"NameError: name 'theDumper' is not defined\n"
>&"Error while executing Python code.\n"
>16^error,msg="Error while executing Python code."
dNOTE: ENGINE SETUP FAILED
dState changed from EngineSetupRequested(1) to EngineSetupFailed(2) [master]
dHANDLE RUNCONTROL FINISHED
sDebugger finished.
sUser requested stop. Shutting down...
dHANDLE RUNCONTROL START FAILED
dState changed from EngineSetupFailed(2) to DebuggerFinished(22) [master]
dQUIT DEBUGGER REQUESTED IN STATE 22
>17^done
dCOOKIE FOR TOKEN 17 ALREADY EATEN (DebuggerFinished). TWO RESPONSES FOR ONE COMMAND?
>=cmd-param-changed,param="detach-on-fork",value="off"
>18^done
dCOOKIE FOR TOKEN 18 ALREADY EATEN (DebuggerFinished). TWO RESPONSES FOR ONE COMMAND?

Any additional information that you could provide to help with this would be greatly appreciated.

Thank You.

Hi stefan.tx,

I also tried what max.tx suggested to AbhinavRawat in the other community forum post linked above and here is the output:

 $ arm-angstrom-linux-gnueabi-gdb
GNU gdb (Linaro GDB) 7.8-2014.09
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-angstromsdk-linux --target=arm-angstrom-linux-gnueabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) python print ("Hello")
Hello
(gdb)

So, based on the output above it looks like python is built into the GDB, but I wonder if Python needs to be a different version than what I have to make the debugger work in Qt Creator

Thank You.

Here’s the output that I see from the debugger window just before the debugger fails. The output is different from the output in the other forum post that I linked above:

&“python sys.path.append(‘/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/data-directory/python’)\n”
14^done

&“python from gdbbridge import *\n”
&“Traceback (most recent call last):\n”
&" File "", line 1, in \n"
&" File "/home/carloval/Qt5.7.0/Tools/QtCreator/share/qtcreator/debugger/gdbbridge.py", line 41, in \n"
&" from dumper import *\n"
&" File "/home/carloval/Qt5.7.0/Tools/QtCreator/share/qtcreator/debugger/dumper.py", line 32, in \n"
&" import json\n"
&“ImportError: No module named ‘json’\n”
&“Error while executing Python code.\n”
15^error,msg=“Error while executing Python code.”

&“python theDumper.loadDumpers({"token":16})\n”
&“Traceback (most recent call last):\n”
&" File "", line 1, in \n"
&“NameError: name ‘theDumper’ is not defined\n”
&“Error while executing Python code.\n”
16^error,msg=“Error while executing Python code.”
dNOTE: ENGINE SETUP FAILED
dState changed from EngineSetupRequested(1) to EngineSetupFailed(2) [master]
dHANDLE RUNCONTROL FINISHED
sDebugger finished.
sUser requested stop. Shutting down…
dHANDLE RUNCONTROL START FAILED
dState changed from EngineSetupFailed(2) to DebuggerFinished(22) [master]

dQUIT DEBUGGER REQUESTED IN STATE 22

Also,

I see the following line in the Debugger Window output from above:

&“python sys.path.append(‘/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/data-directory/python’)\n”
14^done

There is a:

/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/

directory, but the:

/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/data-directory/python

directory doesn’t exist on my system.

Thank You.

It seems that Python is there and working, however Qt Creator tries to import some helper script (dumper.py) and that script tries to import the json module.

As far as I know GCC uses Python 3 in morty, hence you would have to add nativesdk-python3-json to the SDK dependencies. If you build meta-toolchain-qt5 I think adding that to ./meta-qt5/recipes-qt/packagegroups/nativesdk-packagegroup-qt5-toolchain-host.bb should make sure that the library gets included into the SDK.

I close this thread since there is a new thread related to exactly that issue.