Having the ability to see which tasks are running and how they are interacting is also important. In a preemptive scheduling environment, complex relationships can develop between tasks. For example, in order for an event to be serviced, there might be a few tasks that need to interact with one another. On top of that, there may be several more tasks all vying for processor time. In this scenario, a poorly designed system that is consistently missing deadlines may only be perceived as being sluggish from the user's perspective. With task visualization, a programmer can literally see the relationships between all tasks in the system, which helps considerably with analysis.
The ability to easily discern what state tasks are in over a period of time is extremely helpful when unraveling complex inter-task relationships. SEGGER SystemView will also be used to visualize inter-task relationships.
In order to perform an in-depth analysis on a running system, we'll need a way to attach to the MCU and get information out of it. On Cortex-M MCUs, this is most efficiently done with an external debug probe.