Exercise 1: Multiple threads debugging
Using the code from the previous section (time-slicing), we’ll try to see how debugging works in VSCode.
1) in multi-thread-debug create folder .vscode 2) in .vscode create file launch.json 3) setup your debug config as follows inside launch.json (change as applicable)
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "cortex-debug",
            "request": "launch",
            "servertype": "openocd",
            "cwd": "${workspaceRoot}",
            "executable": "build/zephyr/zephyr.elf",
            "name": "zephyr STM32F756ZG",
            "configFiles": [
                "/Users/maksim/zephyrproject/zephyr/boards/arm/nucleo_f756zg/support/openocd.cfg"
                   ],
            "svdFile": "STM32F756.svd"
        }
    ]
}
The svd file can be found on the STM website. Add this file to your folder and mention it in launch.json, this way you’ll be able to easily read out the different registers/peripherals/memory once you’re in debug mode.
4) the svd file is necessary to be able to read registers from that specific stm processor
5) Now go to Run->Start debugging
The first screen should look like this:

If you put an interrupt in the first interrupt, the execution will again be stopped at this point

Notice the “Cortex Peripherals” and “Cortex Registers” on the left-hand side.
Exercise 2: Print runtime statistics
1) Go to exercises/debugging/runtime-statistics
2) Build & Flash
west build -b nucleo_f756zg
west flash
3) Observe the output in the serial monitor:

Exercise 3: Core dump
Come back to this when I understand GDB better
This section is incomplete. You can help by contributing.