Skip to content

Cart

Your cart is empty

ARM

When Breakpoints Aren’t Enough: Debugging Faster with ULINKpro Trace

Most embedded developers are familiar with the usual debugging cycle: set a breakpoint, stop the processor, inspect the problem, make a change, and try again.

 

That works well until the problem depends on timing, interrupts, RTOS task interaction, DMA, communication traffic, or a failure that only occurs occasionally.

 

At that point, stopping the processor can sometimes hide the very problem you are trying to find.

 

This is where trace can make a significant difference.

 

See More Than the Current Breakpoint

 

A debugger such as Keil ULINK2 provides SWD/JTAG debugging together with Serial Wire Viewer (SWV), giving developers runtime information such as events, exceptions, data activity, and program-counter sampling.

 

But SWV is still only showing selected information about what happened.

 

With ULINKpro and ETM instruction trace, the debugger can capture the processor's actual execution history and reconstruct the instructions and code paths that were executed.

 

Instead of reaching a fault and asking:

 

“Why did my software end up here?”

you can trace backwards through the execution sequence that led to it.

 

For complex embedded systems, that difference can dramatically reduce the amount of trial-and-error debugging required.

 

Why ULINKpro?

 

ULINKpro combines traditional debugging with high-speed SWV and ETM instruction trace of up to 800 Mbit/s on supported Cortex-M devices. It can also stream trace directly to the host computer, allowing much longer trace sessions.

 

That gives engineering teams several practical advantages:

  • Find intermittent faults faster by examining what happened before a crash or HardFault.
  • Debug without constantly stopping the processor, helping preserve real-time behaviour.
  • Follow complex execution paths across functions, interrupts and application logic.
  • Identify performance bottlenecks using execution profiling.
  • Generate code-coverage information during testing.
  • Capture longer scenarios instead of repeatedly trying to reproduce the issue.

 

For example, a normal debugging session might tell you that the processor reached HardFault_Handler().

 

ETM trace can help reveal the sequence behind it:

 

Task → ProcessPacket() → Interrupt → Buffer Access → Invalid Pointer → HardFault

 

That extra context can turn repeated breakpoint placement into a much more focused root-cause investigation.

 

ULINK2 or ULINKpro?

 

For everyday firmware development, ULINK2 remains a capable debugger and provides SWV trace for runtime visibility.

 

ULINKpro becomes valuable when simply knowing the current state is no longer enough.

 

ULINK2 helps you see what the system is doing.

ULINKpro can help you understand how the system got there.

 

For RTOS applications, communication stacks, interrupt-heavy firmware, and timing-dependent failures, that execution history can significantly shorten the path from “we reproduced the problem” to “we found the root cause.”

 

ETM trace does require support from the target processor and the appropriate trace connections on the hardware, but when available, ULINKpro provides a level of visibility that traditional stop-and-go debugging cannot.

RELATED NEWS

Configuring QA-MISRA for Real-World Embedded C/C++ Projects
Hrutik Champaneri

Configuring QA-MISRA for Real-World Embedded C/C++ Projects

Getting QA-MISRA running is only the first part of the setup. For an actual embedded project, you will usually need to decide which coding rules should be checked, how compiler-specific code sho[...]

Read more
Setting Up a QA-MISRA Evaluation License and VS Code Extension
Hrutik Champaneri

Setting Up a QA-MISRA Evaluation License and VS Code Extension

The following steps explain how to activate a QA-MISRA evaluation license, configure the local server, install the QA-MISRA extension in Visual Studio Code, and run an example analysis. 1. Requ[...]

Read more
Using QA-MISRA to Bring Coding Standards into C/C++ Development
Hrutik Champaneri

Using QA-MISRA to Bring Coding Standards into C/C++ Development

In embedded and safety-critical software, coding standards help reduce risky language behaviour, improve consistency, and make software easier to review and verify. This is especially important i[...]

Read more
How Static Analysis Supports DO-178C Verification
Hrutik Champaneri

How Static Analysis Supports DO-178C Verification

Developing software for airborne systems requires strong verification evidence, especially for higher-criticality applications. DO-178C defines objectives for airborne software development and ve[...]

Read more
Installing and Using AbsInt Astrée with Visual Studio Code
Hrutik Champaneri

Installing and Using AbsInt Astrée with Visual Studio Code

AbsInt Astrée can be integrated with Visual Studio Code using the A3C extension, allowing developers to run Astrée analysis and review detected alarms directly within the editor. Install and Con[...]

Read more