For the case of debugging with RTOS, CLion provides a view of FreeRTOS, Azure RTOS, and Zephyr tasks (threads). For FreeRTOS, you can also explore objects and heap.
tip
Some gdbservers have built-in support for different RTOS. For CLion integration to work correctly in such cases, make sure to disable the built-in support on the gdbserver side.
Enable RTOS thread view
Go to Settings | Build, Execution, Deployment | Embedded Development | RTOS Integration.
Set the Enable RTOS Integration checkbox and select from the list of options:
note
Note that RTOS integration requires GDB 7.4 or later with Python support. You can use CLion's bundled GDB for that, refer to Switching between the debuggers.
For example, here is how an Embedded GDB Server configuration can be set up using the QEMU emulator:
FreeRTOS / Azure RTOS / Zephyr tasks view
When debugging a configuration like the one given above, you will see the FreeRTOS / Azure RTOS / Zephyr tasks listed in the Threads & Variables pane of the debug tool window.
For each task, the variables are presented in the Variables pane.
The RTOS tasks view also works for Symmetric Multiprocessing (SMP). The processor cores must be identical and share the same memory.
note
If you are working with Zephyr, make sure to set CONFIG_THREAD_MONITOR and CONFIG_THREAD_NAME in your project configuration files, otherwise the debugger will not be able to extract the required information. CLion will notify you in case of missing defines:
FreeRTOS objects view
To explore FreeRTOS objects, switch to the FreeRTOS Objects tab. The Task table shows a list of tasks with status information; the Queue table shows currently active queues, semaphores, and mutexes; the Timer table lists the software timers:
For this tab to work correctly, configure the following definitions in FreeRTOSConfig.h:
Set configUSE_TRACE_FACILITY to 1, for displaying task numbers and queue types.
Set configMAX_TASK_NAME_LEN to a value greater than zero, for displaying the task name properly.
Set configRECORD_STACK_HIGH_ADDRESS to 1, for displaying the task stack info.
Set configUSE_TRACE_FACILITY and configGENERATE_RUN_TIME_STATS to 1 for collecting runtime info (runtime column of the task table).
Use configQUEUE_REGISTRY_SIZE greater than zero and vQueueAddToRegistry() to assign a name to a queue, semaphore, or mutex. This is useful as queues have no name by default, unlike tasks (which get a name at creation time).
CLion will show a warning in case some of the defines are missing:
FreeRTOS heap view
The FreeRTOS Heap tab shows the current heap usage and memory block allocation for all the default FreeRTOS memory management schemes.
note
For heap_5 to be supported properly, make sure to define the xHeapRegions variable in global scope, for example:
Our website uses some cookies and records your IP address for the purposes of accessibility, security, and managing your access to the telecommunication network. You can disable data collection and cookies by changing your browser settings, but it may affect how this website functions. Learn more.
With your consent, JetBrains may also use cookies and your IP address to collect individual statistics and provide you with personalized offers and ads subject to the Privacy Notice and the Terms of Use. JetBrains may use third-party services for this purpose. You can adjust or withdraw your consent at any time by visiting the Opt-Out page.