How to use VSCode GUI to debug LVGL project on i.MX93 EVK board

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to use VSCode GUI to debug LVGL project on i.MX93 EVK board

How to use VSCode GUI to debug LVGL project on i.MX93 EVK board

The Gui-guilder doesn't provide remote debug function in IDE and we still need use Yocto to build project or copy binary to board rootfs.

This knowledge base will provide a solution about how to use VSCode to remote debug LVGL project on i.MX93 EVK board. 

 

Yocto toolchain: L6.6.x

GUI GUILDER: v1.8.0

 

Need to open GUI GUILDER project in VSCode.

 

1.Scripts in VScode

 

1.1 build.sh

Modify build.sh in <LVGL project>/ports/linux

 

 

#!/bin/sh
 
toolchain=$1
if [ -z "$toolchain" ];then
    toolchain=/opt/fsl-imx-xwayland/6.1-mickledore/sysroots/x86_64-pokysdk-linux/usr/share/cmake/armv8a-poky-linux-toolchain.cmake
    if [ ! -r $toolchain ];then
        toolchain=/opt/fsl-imx-xwayland/6.1-langdale/sysroots/x86_64-pokysdk-linux/usr/share/cmake/armv8a-poky-linux-toolchain.cmake
    fi
fi
toolchain_path=$(echo $toolchain |sed -E 's,^(.*)/sysroots/.*,\1,')
toolchain_arch=armv8a-poky-linux
 
if [ ! -r $toolchain -o ! -r "$toolchain_path/environment-setup-$toolchain_arch" ];then
    echo "ERROR: Yocto Toolchain not installed?"
    exit 1
fi
 
if [ -n "$BASH_SOURCE" ]; then
    ROOTDIR="`readlink -f $BASH_SOURCE | xargs dirname`"
elif [ -n "$ZSH_NAME" ]; then
    ROOTDIR="`readlink -f $0 | xargs dirname`"
else
    ROOTDIR="`readlink -f $PWD | xargs dirname`"
fi
 
BUILDDIR=$ROOTDIR/../build
rm -fr $BUILDDIR
mkdir $BUILDDIR
. "$toolchain_path/environment-setup-$toolchain_arch"
echo "start build..."
cd $ROOTDIR/linux/lv_drivers/wayland/
cmake .
make
cd $BUILDDIR
toolchain_path=/opt/fsl-imx-wayland/6.6-scarthgap/sysroots/x86_64-pokysdk-linux/usr/share/cmake/armv8a-poky-linux-toolchain.cmake
cmake -G 'Ninja' .. -DCMAKE_TOOLCHAIN_FILE=$toolchain_path -Wno-dev -DLV_CONF_BUILD_DISABLE_EXAMPLES=1 -DLV_CONF_BUILD_DISABLE_DEMOS=1 -DCMAKE_CXX_FLAGS="-ggd3 -O0" -DCMAKE_BUILD_TYPE=Debug
ninja
if [ -e gui_guider ];then
    echo "Binary locates at $(readlink -f gui_guider)"
    ls -lh gui_guider
fi

# Copy binary to board
scp $BUILDDIR/gui_guider root@192.168.31.243:/opt

 

 

1.2 tasks.json

 

 

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build",
            "type": "shell",  
            "command": "./build.sh /opt/fsl-imx-wayland/6.6-scarthgap", 
			"options": {
				"cwd": "${workspaceFolder}/ports/linux"
                
			},
            "problemMatcher": [
                "$gcc" 
            ],
        }
    ]
}

 

 

 

1.3 launch.json

 

miDebuggerServerAddress is board ip address.

 

 

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "preLaunchTask": "Build",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/gui_guider",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "logging": {
                "engineLogging": true,
                "trace": true, 
                "traceResponse": true 
            },
            "debugStdLib":true,
            "miDebuggerPath":"/usr/bin/gdb-multiarch", //DO NOT USE GDB IN SDK!!!!
            "miDebuggerServerAddress": "192.168.31.243:12345",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true,
                    "text": "set remotetimeout 100",
                }
            ]
            
        }]
}

 

 

 

2. Launch gdbserver on board

 

 

export SHELL=/opt/gui_guider
gdbserver 192.168.31.243:12345 /opt/gui_guider

 

 

 

3. Debug in VSCode

 

Click (gdb)launch, the source code will be compiled.

Zhiming_Liu_1-1726018299992.png

Then you will see the breakpoint in program.

Zhiming_Liu_0-1726018276012.png

Enjoy your debug~

 

 

%3CLINGO-SUB%20id%3D%22lingo-sub-1951541%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EHow%20to%20use%20VSCode%20GUI%20to%20debug%20LVGL%20project%20on%20i.MX93%20EVK%20board%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1951541%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EThe%20Gui-guilder%20doesn't%20provide%20remote%20debug%20function%20in%20IDE%20and%20we%20still%20need%20use%20Yocto%20to%20build%20project%20or%20copy%20binary%20to%20board%20rootfs.%3C%2FP%3E%0A%3CP%3EThis%20knowledge%20base%20will%20provide%20a%20solution%20about%20how%20to%20use%20VSCode%20to%20remote%20debug%20LVGL%20project%20on%20i.MX93%20EVK%20board.%26nbsp%3B%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3EYocto%20toolchain%3A%20L6.6.x%3C%2FP%3E%0A%3CP%3EGUI%20GUILDER%3A%20v1.8.0%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3ENeed%20to%20open%20GUI%20GUILDER%20project%20in%20VSCode.%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CH2%20id%3D%22toc-hId--1182780850%22%20id%3D%22toc-hId--499282001%22%3E1.Scripts%20in%20VScode%3C%2FH2%3E%0A%3CBR%20%2F%3E%0A%3CH3%20id%3D%22toc-hId--492219376%22%20id%3D%22toc-hId-191279473%22%3E1.1%20build.sh%3C%2FH3%3E%0A%3CP%3EModify%20build.sh%20in%20%3CSTRONG%3E%3CLVGL%20project%3D%22%22%3E%2Fports%2Flinux%3C%2FLVGL%3E%3C%2FSTRONG%3E%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%23!%2Fbin%2Fsh%0A%20%0Atoolchain%3D%241%0Aif%20%5B%20-z%20%22%24toolchain%22%20%5D%3Bthen%0A%20%20%20%20toolchain%3D%2Fopt%2Ffsl-imx-xwayland%2F6.1-mickledore%2Fsysroots%2Fx86_64-pokysdk-linux%2Fusr%2Fshare%2Fcmake%2Farmv8a-poky-linux-toolchain.cmake%0A%20%20%20%20if%20%5B%20!%20-r%20%24toolchain%20%5D%3Bthen%0A%20%20%20%20%20%20%20%20toolchain%3D%2Fopt%2Ffsl-imx-xwayland%2F6.1-langdale%2Fsysroots%2Fx86_64-pokysdk-linux%2Fusr%2Fshare%2Fcmake%2Farmv8a-poky-linux-toolchain.cmake%0A%20%20%20%20fi%0Afi%0Atoolchain_path%3D%24(echo%20%24toolchain%20%7Csed%20-E%20's%2C%5E(.*)%2Fsysroots%2F.*%2C%5C1%2C')%0Atoolchain_arch%3Darmv8a-poky-linux%0A%20%0Aif%20%5B%20!%20-r%20%24toolchain%20-o%20!%20-r%20%22%24toolchain_path%2Fenvironment-setup-%24toolchain_arch%22%20%5D%3Bthen%0A%20%20%20%20echo%20%22ERROR%3A%20Yocto%20Toolchain%20not%20installed%3F%22%0A%20%20%20%20exit%201%0Afi%0A%20%0Aif%20%5B%20-n%20%22%24BASH_SOURCE%22%20%5D%3B%20then%0A%20%20%20%20ROOTDIR%3D%22%60readlink%20-f%20%24BASH_SOURCE%20%7C%20xargs%20dirname%60%22%0Aelif%20%5B%20-n%20%22%24ZSH_NAME%22%20%5D%3B%20then%0A%20%20%20%20ROOTDIR%3D%22%60readlink%20-f%20%240%20%7C%20xargs%20dirname%60%22%0Aelse%0A%20%20%20%20ROOTDIR%3D%22%60readlink%20-f%20%24PWD%20%7C%20xargs%20dirname%60%22%0Afi%0A%20%0ABUILDDIR%3D%24ROOTDIR%2F..%2Fbuild%0Arm%20-fr%20%24BUILDDIR%0Amkdir%20%24BUILDDIR%0A.%20%22%24toolchain_path%2Fenvironment-setup-%24toolchain_arch%22%0Aecho%20%22start%20build...%22%0Acd%20%24ROOTDIR%2Flinux%2Flv_drivers%2Fwayland%2F%0Acmake%20.%0Amake%0Acd%20%24BUILDDIR%0Atoolchain_path%3D%2Fopt%2Ffsl-imx-wayland%2F6.6-scarthgap%2Fsysroots%2Fx86_64-pokysdk-linux%2Fusr%2Fshare%2Fcmake%2Farmv8a-poky-linux-toolchain.cmake%0Acmake%20-G%20'Ninja'%20..%20-DCMAKE_TOOLCHAIN_FILE%3D%24toolchain_path%20-Wno-dev%20-DLV_CONF_BUILD_DISABLE_EXAMPLES%3D1%20-DLV_CONF_BUILD_DISABLE_DEMOS%3D1%20-DCMAKE_CXX_FLAGS%3D%22-ggd3%20-O0%22%20-DCMAKE_BUILD_TYPE%3DDebug%0Aninja%0Aif%20%5B%20-e%20gui_guider%20%5D%3Bthen%0A%20%20%20%20echo%20%22Binary%20locates%20at%20%24(readlink%20-f%20gui_guider)%22%0A%20%20%20%20ls%20-lh%20gui_guider%0Afi%0A%0A%23%20Copy%20binary%20to%20board%0Ascp%20%24BUILDDIR%2Fgui_guider%20root%40192.168.31.243%3A%2Fopt%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CH3%20id%3D%22toc-hId-1995293457%22%20id%3D%22toc-hId--1616174990%22%3E1.2%20tasks.json%3C%2FH3%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%7B%0A%20%20%20%20%22version%22%3A%20%222.0.0%22%2C%0A%20%20%20%20%22tasks%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22label%22%3A%20%22Build%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22type%22%3A%20%22shell%22%2C%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%22command%22%3A%20%22.%2Fbuild.sh%20%2Fopt%2Ffsl-imx-wayland%2F6.6-scarthgap%22%2C%20%0A%09%09%09%22options%22%3A%20%7B%0A%09%09%09%09%22cwd%22%3A%20%22%24%7BworkspaceFolder%7D%2Fports%2Flinux%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%09%09%09%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22problemMatcher%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%24gcc%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%5D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CH3%20id%3D%22toc-hId-187838994%22%20id%3D%22toc-hId-871337843%22%3E1.3%20launch.json%3C%2FH3%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%3CSTRONG%3EmiDebuggerServerAddress%3C%2FSTRONG%3E%20is%20board%20ip%20address.%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3E%7B%0A%20%20%20%20%22version%22%3A%20%220.2.0%22%2C%0A%20%20%20%20%22configurations%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22(gdb)%20Launch%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22preLaunchTask%22%3A%20%22Build%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22type%22%3A%20%22cppdbg%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22request%22%3A%20%22launch%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22program%22%3A%20%22%24%7BworkspaceFolder%7D%2Fbuild%2Fgui_guider%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22args%22%3A%20%5B%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22stopAtEntry%22%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22cwd%22%3A%20%22%24%7BworkspaceFolder%7D%2F%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22environment%22%3A%20%5B%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22externalConsole%22%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22MIMode%22%3A%20%22gdb%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22logging%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22engineLogging%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22trace%22%3A%20true%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22traceResponse%22%3A%20true%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22debugStdLib%22%3Atrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22miDebuggerPath%22%3A%22%2Fusr%2Fbin%2Fgdb-multiarch%22%2C%20%2F%2FDO%20NOT%20USE%20GDB%20IN%20SDK!!!!%0A%20%20%20%20%20%20%20%20%20%20%20%20%22miDebuggerServerAddress%22%3A%20%22192.168.31.243%3A12345%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22setupCommands%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22description%22%3A%20%22Enable%20pretty-printing%20for%20gdb%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22text%22%3A%20%22-enable-pretty-printing%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22ignoreFailures%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22text%22%3A%20%22set%20remotetimeout%20100%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%5D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CH2%20id%3D%22toc-hId-177335890%22%20id%3D%22toc-hId-860834739%22%3E2.%20Launch%20gdbserver%20on%20board%3C%2FH2%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%3Eexport%20SHELL%3D%2Fopt%2Fgui_guider%0Agdbserver%20192.168.31.243%3A12345%20%2Fopt%2Fgui_guider%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%0A%3CH2%20id%3D%22toc-hId--1630118573%22%20id%3D%22toc-hId--946619724%22%3E3.%20Debug%20in%20VSCode%3C%2FH2%3E%0A%3CBR%20%2F%3E%0A%3CP%3EClick%20(gdb)launch%2C%20the%20source%20code%20will%20be%20compiled.%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-center%22%20image-alt%3D%22Zhiming_Liu_1-1726018299992.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Zhiming_Liu_1-1726018299992.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F298407iA00BF07743C29050%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22Zhiming_Liu_1-1726018299992.png%22%20alt%3D%22Zhiming_Liu_1-1726018299992.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3EThen%20you%20will%20see%20the%20breakpoint%20in%20program.%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-center%22%20image-alt%3D%22Zhiming_Liu_0-1726018276012.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Zhiming_Liu_0-1726018276012.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F298406i3CD4D029F90E445E%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22Zhiming_Liu_0-1726018276012.png%22%20alt%3D%22Zhiming_Liu_0-1726018276012.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3EEnjoy%20your%20debug~%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-1951541%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3EGraphics%20%26amp%3B%20Display%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3ELinux%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3EYocto%20Project%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
100% helpful (1/1)
Version history
Last update:
‎09-10-2024 06:37 PM
Updated by: