Skip to main content
Associate
Jul 7, 2023 9:45 AM UTC
Question

Debug fails from imported STM32CubeIDE project to VSCode

Hello, I have been working with the STM32CubeIDE for a while and I was thinking of maybe moving to VSCode as I am liking the VSCode interface a lot better than the Eclipse style of the CubeIDE.

I installed the STM32 Extension for VSCode and I installed all the necessary applications suggested by the Extension and added the PATH to the System Variables.

I imported an existing CubeIDE project to VSCode and VSCode automatically generated cmake files, CMakeLists.txt file and .json files like launch.json, tasks.json, settings.json etc. When I run CMake-> Build, it builds completely without errors and the output shows the .obj files generated. But when I go to main.c and press Debug C/C++ File, it runs into an error and it says that main.h:  No such file or directory.

I haven't edited any auto-generated files by VSCode and I have attached the files for reference. Could anybody let me know what the problem could be? Thanks in advance.

launch.json

 

{
 "version": "0.2.0",
 "configurations": [
 {
 "name": "Launch",
 "type": "cppdbg",
 "request": "launch",
 "cwd": "${workspaceFolder}",
 "program": "${command:cmake.launchTargetPath}",
 "MIMode": "gdb",
 "miDebuggerPath": "${command:vscode-embedded.st.gdb}",
 "miDebuggerServerAddress": "localhost:3333",
 "debugServerPath": "${command:vscode-embedded.st.gdbserver}",
 "debugServerArgs": "--stm32cubeprogrammer-path ${command:vscode-embedded.st.cubeprogrammer} --swd --port-number 3333",
 "serverStarted": "Waiting for connection on port .*\\.\\.\\.",
 "stopAtConnect": true,
 "postRemoteConnectCommands": [
 {
 "text": "load build/debug/build/firmware-maincontroller.elf"
 }
 ],
 "logging": {
 "engineLogging": true
 },
 "preLaunchTask": "Build",
 "svdPath": "${command:vscode-embedded.st.svd}/STM32F429.svd"
 }
 ]
}

 

 

tasks.json

 

{
 "version": "2.0.0",
 "tasks": [
 {
 "label": "Build",
 "type": "cmake",
 "command": "build",
 "problemMatcher": "$gcc",
 "group": "build"
 },
 {
 "type": "cppbuild",
 "label": "C/C++: gcc.exe build active file",
 "command": "C:\\MinGW\\bin\\gcc.exe",
 "args": [
 "-fdiagnostics-color=always",
 "-g",
 "${file}",
 "-o",
 "${fileDirname}\\${fileBasenameNoExtension}.exe"
 ],
 "options": {
 "cwd": "${fileDirname}"
 },
 "problemMatcher": [
 "$gcc"
 ],
 "group": {
 "kind": "build",
 "isDefault": true
 },
 "detail": "Task generated by Debugger."
 }
 ]
}

 

settings.json

 

{
 "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
 "cmake.configureOnOpen": true,
 "files.associations": {
 "main.h": "c",
 "config.h": "c",
 "calibration.h": "c"
 }
}

 

Error

 

* Executing task: C/C++: gcc.exe build active file

Starting build...
C:\MinGW\bin\gcc.exe -fdiagnostics-color=always -g C:\Users\user\Documents\Firmware_Development\CubeIDE\firmware-maincontroller\Core\Src\main.c -o C:\Users\user\Documents\Firmware_Development\CubeIDE\firmware-maincontroller\Core\Src\main.exe
C:\Users\user\Documents\Firmware_Development\CubeIDE\firmware-maincontroller\Core\Src\main.c:20:18: fatal error: main.h: No such file or directory
#include "main.h"
^
compilation terminated.

Build finished with error(s).

* The terminal process terminated with exit code: -1.
* Terminal will be reused by tasks, press any key to close it.

 

,

This topic has been closed for replies.

9 replies

MM..1
Super User
Jul 7, 2023 9:55 AM UTC

Maybe try dont use - in folder file names...

kkarAuthor
Associate
Jul 7, 2023 10:08 AM UTC

Which file names do you mean?

MM..1
Super User
Jul 7, 2023 10:11 AM UTC
firmware-maincontroller

but i mean your config have more issues, use platformio is simpler...

TDJ
Senior III
Jul 7, 2023 11:17 AM UTC

For a complete, well-tested and documented VS Code env setup you can check out my STM32F769I-DISCO demo at
https://github.com/tdjastrzebski/STM32F769I-DISCO-LVGL

kkarAuthor
Associate
Jul 7, 2023 11:41 AM UTC

Thank you so much for the suggestion. I am looking for more CMake based options.

KnarfB
Super User
Jul 7, 2023 12:12 PM UTC

The line

 

"preLaunchTask": "Build",

 

is wrong, because it triggers the Build task in settings.json which wants to compile a C/C++ single file and does not know about your project or CMake at all. Remove that line.

hth

KnarfB

kkarAuthor
Associate
Jul 7, 2023 1:12 PM UTC

Thank you so much. It helped. But that line was auto-generated by the Extension.
Anyway, it went through and the auto-breakpoint was set on the Reset_Handler: function in the startup file. When I ran it, it ran till the first line of the main function and there was no response.

kkar_0-1688735430136.png

When I paused it, it said Exception has occured and Interrupt.
1. What could be causing this issue? - I think pausing it has caused the error. I am not sure if that is how it reacts when the debugger is paused.

2. If the above issue is solved, does ST-Link GDB server trace the printf statements or should it be configured as well somehow?
Thank you once again.