mbox series

[v2,00/14] IDE SDK Improvements

Message ID 20251231114718.4031606-1-adrian.freihofer@siemens.com
Headers show
Series IDE SDK Improvements | expand

Message

AdrianF Dec. 31, 2025, 11:46 a.m. UTC
From: Adrian Freihofer <adrian.freihofer@siemens.com>

Changes in comparison to v1:
- Try to fix https://autobuilder.yoctoproject.org/valkyrie/#/builders/23/builds/3070
  The tests does remote debugging in Qemu. It sets a breakpoint on a line
  which is optimized out by the compiler. That's now fixed by setting the
  breakpoint on the next line, which is always there.
  So far this is understood and fixed. But what is not yet fully understood
  is: Why does it pass on x86 hosts but not on arm hosts?

- Improve remote debugging
  - Added GDB pretty-printing for C++ STL types (e.g., std::vector) to
    improve visibility during debugging.
  - Evaluated DEBUG_PREFIX_MAP for accurate source mapping in debug
    sessions.
  - Introduced gdbserver attach mode for more flexible remote debugging.
  - Moved the code that starts GDB sessions on the remote target from
    wrapper scripts into VSCode JSON files. This simplifies
    customization and improves transparency.

- Improve test coverage for ide-sdk features
  - Test the complete VSCode remote debugging workflow by reading VSCode
    JSON files.
  - Added example code using std::vector and tests for pretty-printing.
  - Extended the CMake and Meson examples with a service and added test
    coverage for the new GDB attach mode.
  - Added debug logging in DevtoolIdeSdkTests to aid troubleshooting.

- Fixes
  - Located and integrated bitbake-setup init-build-env for consistent
    environments.

- Misc
  - Added a compile step in ide-sdk tests to ensure builds are up to
    date. This is required when bitbake supports running do_install
    without dependent tasks.

Adrian Freihofer (14):
  devtool: ide-sdk find bitbake-setup init-build-env
  oe-selftest: devtool: DevtoolIdeSdkTests debug logging
  cpp-example: run as a service
  oe-selftest: devtool: check example services are running
  devtool: ide-sdk: add gdbserver attach mode support
  devtool: ide-sdk: move code to ide_none
  devtool: ide-sdk: make install_and_deploy script pass target arg
  devtool: ide-sdk: vscode replace scripts
  oe-selftest: devtool ide-sdk cover vscode remote debugging
  devtool: ide-sdk: evaluate DEBUG_PREFIX_MAP
  cpp-example: Add std::vector example
  devtool: ide-sdk: Support GDB pretty-printing for C++ STL types
  oe-selftest: devtool: add test for gdb pretty-printing
  oe-selftest: devtool: add compile step in ide-sdk tests

 .../recipes-test/cpp/cpp-example.inc          |  52 +-
 .../recipes-test/cpp/files/CMakeLists.txt     |  14 +-
 .../recipes-test/cpp/files/config.h.in        |  10 +
 .../cpp/files/cpp-example-lib.cpp             |  29 +
 .../cpp/files/cpp-example-lib.hpp             |   3 +
 .../recipes-test/cpp/files/cpp-example.conf   |   3 +
 .../recipes-test/cpp/files/cpp-example.cpp    |  46 +-
 .../recipes-test/cpp/files/cpp-example.init   |  84 +++
 .../cpp/files/cpp-example.service             |  12 +
 .../recipes-test/cpp/files/meson.build        |  18 +-
 .../cpp/files/test-cpp-example.cpp            |   2 +
 .../recipes-test/cpp/meson-example.bb         |   2 +
 meta/lib/oeqa/selftest/cases/devtool.py       | 539 +++++++++++++++---
 scripts/lib/devtool/ide_plugins/__init__.py   | 231 ++++----
 scripts/lib/devtool/ide_plugins/ide_code.py   | 159 ++++--
 scripts/lib/devtool/ide_plugins/ide_none.py   | 140 ++++-
 scripts/lib/devtool/ide_sdk.py                | 285 ++++++++-
 scripts/lib/devtool/standard.py               |   7 +-
 18 files changed, 1369 insertions(+), 267 deletions(-)
 create mode 100644 meta-selftest/recipes-test/cpp/files/config.h.in
 create mode 100644 meta-selftest/recipes-test/cpp/files/cpp-example.conf
 create mode 100644 meta-selftest/recipes-test/cpp/files/cpp-example.init
 create mode 100644 meta-selftest/recipes-test/cpp/files/cpp-example.service

Comments

Antonin Godard Jan. 13, 2026, 8:17 a.m. UTC | #1
Hi Adrian,

I think I hit a different error on the Autobuilder with your series:

2026-01-12 21:40:10,012 - oe-selftest - INFO - FAIL: devtool.DevtoolIdeSdkTests.test_devtool_ide_sdk_code_cmake (subunit.RemotedTestCase)
2026-01-12 21:40:10,012 - oe-selftest - INFO - ----------------------------------------------------------------------
2026-01-12 21:40:10,012 - oe-selftest - INFO - testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/layers/openembedded-core/meta/lib/oeqa/selftest/cases/devtool.py", line 3238, in test_devtool_ide_sdk_code_cmake
    self._verify_launch_json_debugging(tempdir, qemu, recipe_name, example_exe)
  File "/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/layers/openembedded-core/meta/lib/oeqa/selftest/cases/devtool.py", line 3107, in _verify_launch_json_debugging
    self._verify_launch_config(tempdir, config, tasks, qemu, example_exe,
  File "/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/layers/openembedded-core/meta/lib/oeqa/selftest/cases/devtool.py", line 3204, in _verify_launch_config
    r = runCmd(gdb_batch_cmd, output_log=self._cmd_logger)
  File "/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/layers/openembedded-core/meta/lib/oeqa/utils/commands.py", line 214, in runCmd
    raise AssertionError("Command '%s' returned non-zero exit status %d:\n%s" % (command, result.status, exc_output))
AssertionError: Command '/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/aarch64-linux/gdb-cross-aarch64/16.3/recipe-sysroot-native/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gdb --batch -ex 'set sysroot /srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/cortexa57-poky-linux/cmake-example/1.0/image' -ex 'python import sys;sys.path.insert(0, '"'"'/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/cortexa57-poky-linux/cmake-example/1.0/recipe-sysroot/usr/share/gcc-15.2.0/python'"'"');from libstdcxx.v6.printers import register_libstdcxx_printers;register_libstdcxx_printers(None)' -ex 'set substitute-path /usr/include /srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/cortexa57-poky-linux/cmake-example/1.0/recipe-sysroot/usr/include' -ex 'set substitute-path /usr/src/debug/cmake-example/1.0 /tmp/devtoolqa5x_myf_r' -ex 'set substitute-path /usr/src/debug /srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-poky-linux/oe-selftest-image/1.0/rootfs-dbg/usr/src/debug' -ex 'set solib-search-path /srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-poky-linux/oe-selftest-image/1.0/rootfs-dbg/lib/.debug:/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-poky-linux/oe-selftest-image/1.0/rootfs-dbg/usr/lib/.debug:/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-poky-linux/oe-selftest-image/1.0/rootfs-dbg/usr/lib/debug:/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-poky-linux/oe-selftest-image/1.0/rootfs-dbg/lib:/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-poky-linux/oe-selftest-image/1.0/rootfs-dbg/usr/lib:/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-poky-linux/oe-selftest-image/1.0/rootfs/lib:/srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-poky-linux/oe-selftest-image/1.0/rootfs/usr/lib' -ex 'file /srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-241514/tmp/work/cortexa57-poky-linux/cmake-example/1.0/image/usr/bin/cmake-example' -ex 'target remote 192.168.7.2:1234' -ex 'break main' -ex 'continue' -ex 'break CppExample::print_json()' -ex 'continue' -ex 'print CppExample::test_string.compare("cpp-example-lib Magic: 123456789")' -ex 'print CppExample::test_string.compare("cpp-example-lib Magic: 123456789aaa")' -ex 'list cpp-example-lib.hpp:14,14' -ex 'list cpp-example.cpp:55,55' -ex 'break cpp-example.cpp:55' -ex 'continue' -ex 'print numbers' -ex 'continue'' returned non-zero exit status 1:
_start () at ../sysdeps/aarch64/dl-start.S:23
23	ENTRY (_start)
Breakpoint 1 at 0xaaaaaaaa1400: file /usr/src/debug/cmake-example/1.0/cpp-example.cpp, line 15.

Breakpoint 1, main (argc=1, argv=0xfffffffffd08) at /usr/src/debug/cmake-example/1.0/cpp-example.cpp:15
15	{
Breakpoint 2 at 0xfffff7f91d70: file /usr/src/debug/cmake-example/1.0/cpp-example-lib.cpp, line 28.

Breakpoint 2, CppExample::print_json (this=0xfffffffffac8) at /usr/src/debug/cmake-example/1.0/cpp-example-lib.cpp:28
28	    jobj = json_object_new_object();
$1 = 0
$2 = -3
14	    inline static const std::string test_string = "cpp-example-lib Magic: 123456789";
55	    std::vector<int> numbers = {1, 2, 3};
No compiled code for line 55 in file "cpp-example.cpp".
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
[Inferior 1 (process 333) exited normally]
A syntax error in expression, near the end of `numbers'.
The program is not being run.

It's also on an Arm host as Mathieu also noticed previously.

Can you have a look?

https://autobuilder.yoctoproject.org/valkyrie/#/builders/23/builds/3145
https://autobuilder.yoctoproject.org/valkyrie/api/v2/logs/4913998/raw_inline

Thanks,
Antonin
Adrian Freihofer Jan. 14, 2026, 6:37 p.m. UTC | #2
Hi Antonin

My proposal for proceeding here is to drop one patch from my series:
  [OE-core] [PATCH v2 13/14]
  oe-selftest: devtool: add test for gdb pretty-printing

This one get killed by patches which are currently on master-next too.
This makes it almost impossible to fix at the moment.
When things will settle down, I will test and send this one again.

It is just one more test step which would be nice to have but not
essential.
It also fails only on a ARM host, which I cannot reproduce.

All in all just too many floating parts for getting this to final state
right now.

Could we please proceed with 13 out of 14 patches from my series as a
next step? Mathieu already hat such a branch for a while.

Thank you.
Adrian



On Tue, 2026-01-13 at 09:17 +0100, Antonin Godard via
lists.openembedded.org wrote:
> Hi Adrian,
> 
> I think I hit a different error on the Autobuilder with your series:
> 
> 2026-01-12 21:40:10,012 - oe-selftest - INFO - FAIL:
> devtool.DevtoolIdeSdkTests.test_devtool_ide_sdk_code_cmake
> (subunit.RemotedTestCase)
> 2026-01-12 21:40:10,012 - oe-selftest - INFO - ----------------------
> ------------------------------------------------
> 2026-01-12 21:40:10,012 - oe-selftest - INFO -
> testtools.testresult.real._StringException: Traceback (most recent
> call last):
>   File "/srv/pokybuild/yocto-worker/oe-selftest-
> armhost/build/layers/openembedded-
> core/meta/lib/oeqa/selftest/cases/devtool.py", line 3238, in
> test_devtool_ide_sdk_code_cmake
>     self._verify_launch_json_debugging(tempdir, qemu, recipe_name,
> example_exe)
>   File "/srv/pokybuild/yocto-worker/oe-selftest-
> armhost/build/layers/openembedded-
> core/meta/lib/oeqa/selftest/cases/devtool.py", line 3107, in
> _verify_launch_json_debugging
>     self._verify_launch_config(tempdir, config, tasks, qemu,
> example_exe,
>   File "/srv/pokybuild/yocto-worker/oe-selftest-
> armhost/build/layers/openembedded-
> core/meta/lib/oeqa/selftest/cases/devtool.py", line 3204, in
> _verify_launch_config
>     r = runCmd(gdb_batch_cmd, output_log=self._cmd_logger)
>   File "/srv/pokybuild/yocto-worker/oe-selftest-
> armhost/build/layers/openembedded-
> core/meta/lib/oeqa/utils/commands.py", line 214, in runCmd
>     raise AssertionError("Command '%s' returned non-zero exit status
> %d:\n%s" % (command, result.status, exc_output))
> AssertionError: Command '/srv/pokybuild/yocto-worker/oe-selftest-
> armhost/build/build-st-241514/tmp/work/aarch64-linux/gdb-cross-
> aarch64/16.3/recipe-sysroot-native/usr/bin/aarch64-poky-
> linux/aarch64-poky-linux-gdb --batch -ex 'set sysroot
> /srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-
> 241514/tmp/work/cortexa57-poky-linux/cmake-example/1.0/image' -ex
> 'python import sys;sys.path.insert(0, '"'"'/srv/pokybuild/yocto-
> worker/oe-selftest-armhost/build/build-st-241514/tmp/work/cortexa57-
> poky-linux/cmake-example/1.0/recipe-sysroot/usr/share/gcc-
> 15.2.0/python'"'"');from libstdcxx.v6.printers import
> register_libstdcxx_printers;register_libstdcxx_printers(None)' -ex
> 'set substitute-path /usr/include /srv/pokybuild/yocto-worker/oe-
> selftest-armhost/build/build-st-241514/tmp/work/cortexa57-poky-
> linux/cmake-example/1.0/recipe-sysroot/usr/include' -ex 'set
> substitute-path /usr/src/debug/cmake-example/1.0
> /tmp/devtoolqa5x_myf_r' -ex 'set substitute-path /usr/src/debug
> /srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-
> 241514/tmp/work/qemuarm64-poky-linux/oe-selftest-image/1.0/rootfs-
> dbg/usr/src/debug' -ex 'set solib-search-path /srv/pokybuild/yocto-
> worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-
> poky-linux/oe-selftest-image/1.0/rootfs-
> dbg/lib/.debug:/srv/pokybuild/yocto-worker/oe-selftest-
> armhost/build/build-st-241514/tmp/work/qemuarm64-poky-linux/oe-
> selftest-image/1.0/rootfs-dbg/usr/lib/.debug:/srv/pokybuild/yocto-
> worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-
> poky-linux/oe-selftest-image/1.0/rootfs-
> dbg/usr/lib/debug:/srv/pokybuild/yocto-worker/oe-selftest-
> armhost/build/build-st-241514/tmp/work/qemuarm64-poky-linux/oe-
> selftest-image/1.0/rootfs-dbg/lib:/srv/pokybuild/yocto-worker/oe-
> selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-poky-
> linux/oe-selftest-image/1.0/rootfs-dbg/usr/lib:/srv/pokybuild/yocto-
> worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-
> poky-linux/oe-selftest-image/1.0/rootfs/lib:/srv/pokybuild/yocto-
> worker/oe-selftest-armhost/build/build-st-241514/tmp/work/qemuarm64-
> poky-linux/oe-selftest-image/1.0/rootfs/usr/lib' -ex 'file
> /srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-
> 241514/tmp/work/cortexa57-poky-linux/cmake-
> example/1.0/image/usr/bin/cmake-example' -ex 'target remote
> 192.168.7.2:1234' -ex 'break main' -ex 'continue' -ex 'break
> CppExample::print_json()' -ex 'continue' -ex 'print
> CppExample::test_string.compare("cpp-example-lib Magic: 123456789")'
> -ex 'print CppExample::test_string.compare("cpp-example-lib Magic:
> 123456789aaa")' -ex 'list cpp-example-lib.hpp:14,14' -ex 'list cpp-
> example.cpp:55,55' -ex 'break cpp-example.cpp:55' -ex 'continue' -ex
> 'print numbers' -ex 'continue'' returned non-zero exit status 1:
> _start () at ../sysdeps/aarch64/dl-start.S:23
> 23	ENTRY (_start)
> Breakpoint 1 at 0xaaaaaaaa1400: file /usr/src/debug/cmake-
> example/1.0/cpp-example.cpp, line 15.
> 
> Breakpoint 1, main (argc=1, argv=0xfffffffffd08) at
> /usr/src/debug/cmake-example/1.0/cpp-example.cpp:15
> 15	{
> Breakpoint 2 at 0xfffff7f91d70: file /usr/src/debug/cmake-
> example/1.0/cpp-example-lib.cpp, line 28.
> 
> Breakpoint 2, CppExample::print_json (this=0xfffffffffac8) at
> /usr/src/debug/cmake-example/1.0/cpp-example-lib.cpp:28
> 28	    jobj = json_object_new_object();
> $1 = 0
> $2 = -3
> 14	    inline static const std::string test_string = "cpp-
> example-lib Magic: 123456789";
> 55	    std::vector<int> numbers = {1, 2, 3};
> No compiled code for line 55 in file "cpp-example.cpp".
> Make breakpoint pending on future shared library load? (y or [n])
> [answered N; input not from terminal]
> [Inferior 1 (process 333) exited normally]
> A syntax error in expression, near the end of `numbers'.
> The program is not being run.
> 
> It's also on an Arm host as Mathieu also noticed previously.
> 
> Can you have a look?
> 
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/23/builds/3145
> https://autobuilder.yoctoproject.org/valkyrie/api/v2/logs/4913998/raw_inline
> 
> Thanks,
> Antonin
> 
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#229231):
> https://lists.openembedded.org/g/openembedded-core/message/229231
> Mute This Topic: https://lists.openembedded.org/mt/117010483/4454582
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe:
> https://lists.openembedded.org/g/openembedded-core/unsub [
> adrian.freihofer@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
Antonin Godard Jan. 20, 2026, 11:59 a.m. UTC | #3
Hi,

On Wed Jan 14, 2026 at 7:37 PM CET, adrian.freihofer wrote:
> Hi Antonin
>
> My proposal for proceeding here is to drop one patch from my series:
>   [OE-core] [PATCH v2 13/14]
>   oe-selftest: devtool: add test for gdb pretty-printing
>
> This one get killed by patches which are currently on master-next too.
> This makes it almost impossible to fix at the moment.
> When things will settle down, I will test and send this one again.
>
> It is just one more test step which would be nice to have but not
> essential.
> It also fails only on a ARM host, which I cannot reproduce.
>
> All in all just too many floating parts for getting this to final state
> right now.
>
> Could we please proceed with 13 out of 14 patches from my series as a
> next step? Mathieu already hat such a branch for a while.

Sorry for messing up with what Mathieu had on his branch, probably a miss on my
side as I've picked up his work.

I picked your patches again, and while some oe-selftest runs did succeed, I hit
this error, which seem related to your series:

https://autobuilder.yoctoproject.org/valkyrie/api/v2/logs/4983396/raw_inline

From this build:
https://autobuilder.yoctoproject.org/valkyrie/#/builders/35/builds/3035

It was run with the following commits:
https://git.yoctoproject.org/poky-ci-archive/log/?h=oecore/autobuilder.yoctoproject.org/valkyrie/a-full-3073

I don't recall hitting the issue before having your series in my branch, so to
be sure I ran another build with only your series applied on master, and I still
have the issue:
https://autobuilder.yoctoproject.org/valkyrie/api/v2/logs/5038061/raw_inline

Can you have a look?

Antonin
Adrian Freihofer Jan. 26, 2026, 7:47 a.m. UTC | #4
On Tue, 2026-01-20 at 12:59 +0100, Antonin Godard wrote:
> Hi,
> 
> On Wed Jan 14, 2026 at 7:37 PM CET, adrian.freihofer wrote:
> > Hi Antonin
> > 
> > My proposal for proceeding here is to drop one patch from my
> > series:
> >   [OE-core] [PATCH v2 13/14]
> >   oe-selftest: devtool: add test for gdb pretty-printing
> > 
> > This one get killed by patches which are currently on master-next
> > too.
> > This makes it almost impossible to fix at the moment.
> > When things will settle down, I will test and send this one again.
> > 
> > It is just one more test step which would be nice to have but not
> > essential.
> > It also fails only on a ARM host, which I cannot reproduce.
> > 
> > All in all just too many floating parts for getting this to final
> > state
> > right now.
> > 
> > Could we please proceed with 13 out of 14 patches from my series as
> > a
> > next step? Mathieu already hat such a branch for a while.
> 
> Sorry for messing up with what Mathieu had on his branch, probably a
> miss on my
> side as I've picked up his work.

The situation was very confusing.
> 
> I picked your patches again, and while some oe-selftest runs did
> succeed, I hit
> this error, which seem related to your series:
> 
> https://autobuilder.yoctoproject.org/valkyrie/api/v2/logs/4983396/raw_inline
> 
> From this build:
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/35/builds/3035
> 
> It was run with the following commits:
> https://git.yoctoproject.org/poky-ci-archive/log/?h=oecore/autobuilder.yoctoproject.org/valkyrie/a-full-3073
> 
> I don't recall hitting the issue before having your series in my
> branch, so to
> be sure I ran another build with only your series applied on master,
> and I still
> have the issue:
> https://autobuilder.yoctoproject.org/valkyrie/api/v2/logs/5038061/raw_inline
> 
> Can you have a look?

Yes, it seams that my patches can trigger this race issue. I sent a v3
with a fix.

Thank you for the extra effort. It's very helpful.

Adrian

> 
> Antonin