Перевод статьи Using Tracealyzer for Embedded Systems Analysis — Erich Styger, MCU on Eclipse.

В своём последнем исследовательском проекте я использую плату NXP FRDM-MCXN947. В рамках проекта мне нужно собирать и выгружать трассировку работы приложения для последующего анализа. Для этого я применяю Tracealyzer от Percepio.

Окно Percepio Tracealyzer с данными трассировки

Данные трассировки в Percepio Tracealyzer

В этой статье я опишу разные способы выгрузить данные трассировки с целевого устройства: с помощью стандартных команд GDB или через TraceExporter для VS Code.

Общая схема#

При работе с Tracealyzer приложение инструментируется так, чтобы записывать события системы. Данные можно передавать потоком, например через SEGGER RTT, или записывать в кольцевой буфер.

Кольцевой буфер хорош тем, что данные пишутся без отладочной сессии. Потом можно подключиться отладчиком и забрать последние данные из буфера. Другой вариант — поставить точку останова в колбэке «буфер заполнен» (OnTraceWrap()) и сохранять данные в этот момент.

В статье я использую VS Code с отладкой через NXP LinkServer на плате FRDM-MCXN947. Всё прекрасно работает как с расширением cortex-debug, так и с mcuxpresso-debug.

Отладочная плата NXP FRDM-MCXN947

Плата NXP FRDM-MCXN947

Настройка трассировки в кольцевой буфер#

В моём приложении данные трассировки записываются в кольцевой буфер.

Для этого библиотека трассировки инициализируется так:

vTraceEnable(TRC_START);

Настройка McuLib#

В проекте используется McuLib со следующей конфигурацией:

/* FreeRTOS */
#define McuLib_CONFIG_SDK_USE_FREERTOS              (1)
#define configUSE_TRACE_FACILITY                        (1)
#define configGENERATE_RUN_TIME_STATS                   (1)
#define configGENERATE_RUN_TIME_STATS_USE_TICKS         (1)

/* Tracealyzer */
#define configUSE_PERCEPIO_TRACE_HOOKS                  (1) /* Percepio Tracealyzer */
#define McuPercepio_CONFIG_START_TRACE_IN_STARTUP_MODE  TRC_INIT /* TRC_INIT: only initialize trace, start it later with */
#define McuPercepio_CONFIG_RECORDER_MODE                TRC_RECORDER_MODE_SNAPSHOT /*TRC_RECORDER_MODE_STREAMING*/
#if McuPercepio_CONFIG_RECORDER_MODE==TRC_RECORDER_MODE_SNAPSHOT
    /* overwrite defaults in trcSnapshotConfig.h */
    #define TRC_CFG_SNAPSHOT_MODE                      TRC_SNAPSHOT_MODE_RING_BUFFER /* TRC_SNAPSHOT_MODE_STOP_WHEN_FULL */
    #define TRC_CFG_EVENT_BUFFER_SIZE                  (50)
#endif

Выгрузка данных через GDB#

Один из способов выгрузить данные — команда GDB dump.

Код ниже в колбэке формирует команду GDB вида

dump binary memory <file> <hexStartAddr> <hexEndAddr>
void McuPercepio_OnTraceWrap(void)
{
  uint8_t buf[64];
  #define TRACE_DUMP_FILE_NAME   "trc.dump"

  /* GDB: dump binary memory <file> <hexStartAddr> <hexEndAddr> */
  McuPercepio_vGetGDBDumpCommand(buf, sizeof(buf), (unsigned char*)TRACE_DUMP_FILE_NAME);
  /* Hint: set a breakpoint on the exit of this function. Then use a gdb/debug console to execute the command in buf:
     eval "%s", buf
  */
}

Теперь можно поставить точку останова и командой GDB eval выполнить команду из буфера — данные сохранятся в файл:

Консоль отладки VS Code с командой eval для дампа трассировки

Выгрузка данных командами GDB eval и dump (mcuxpresso-debug)

Правда, синтаксис команды немного различается в зависимости от используемого расширения VS Code:

  • cortex-debug: eval \"%s\",buf
  • mcuxpresso-debug: eval "%s",buf

TraceExporter для VS Code#

Percepio выпускает расширение для VS Code: https://percepio.com/traceexporter-for-vs-code/. На момент написания статьи я использую версию 0.3.1.

Расширение устанавливается из файла .vsix.

С ним можно остановить target в любом месте и нажать кнопку «Save Trace»:

Кнопка Save Trace расширения TraceExporter в VS Code

Выгрузка трассировки с помощью Percepio TraceExporter

Дополнительный плюс расширения — кнопка для просмотра данных трассировки:

Кнопка View Trace в VS Code

Кнопка View Trace

Убедитесь, что исполняемый файл Percepio Tracealyzer доступен через PATH. Тогда по кнопке откроется Tracealyzer с выгруженными данными:

Данные трассировки, открытые в Percepio Tracealyzer

Данные трассировки в Percepio Tracealyzer

Итоги#

Раньше для выгрузки трассировки я пользовался стандартными командами GDB. Это работает и с GDB из командной строки, и с GDB внутри VS Code. Но если вы работаете в VS Code, очень удобно расширение Percepio: одной кнопкой данные выгружаются, другой — открываются для анализа. Всё становится очень просто.

Помимо описанных способов выгрузки есть и ещё один — через semihosting, см. https://mcuoneclipse.com/2026/06/01/semihosting-with-linkserver-in-vs-code/.

Удачной трассировки 🙂

Ссылки#