Debug module

The debug module intends to improve the overall debugging experience in the application. By default, it subscribes to all the events in the system and implements support for Memfault through the Memfault module integrated in nRF Connect SDK.

Note

To enable the debug module, you must include the ../overlay-debug.conf overlay configuration file when building the application.

Features

This section documents the various features implemented by the module.

Memfault

The debug module uses Memfault SDK to track nRF Connect SDK specific metrics such as LTE and stack metrics. In addition, the following types of custom Memfault metrics are defined and tracked when compiling in the debug module:

  • gnss_time_to_fix_ms - Time duration between the start of a GNSS search and obtaining a fix.

  • gnss_satellites_tracked_count - Number of satellites tracked during a GNSS search window.

  • location_timeout_search_time_ms - Time duration between the start of a location search and a search timeout.

The debug module also implements Memfault SDK software watchdog, which is designed to trigger an assert before an actual watchdog timeout. This enables the application to be able to collect coredump data before a reboot occurs.

To enable Memfault, you must include the ../overlay-memfault.conf when building the application. To get started with Memfault integration in nRF Connect SDK, see Memfault integration.

Custom transport

The data that is collected from the device can be routed through a custom transport to the Memfault cloud instead of using Memfault’s own HTTPS transport. To do this, enable the CONFIG_DEBUG_MODULE_MEMFAULT_USE_EXTERNAL_TRANSPORT Kconfig option. If this option is enabled, the debug module forwards the captured Memfault data through the DEBUG_EVT_MEMFAULT_DATA_READY event. If the CONFIG_DEBUG_MODULE_MEMFAULT_USE_EXTERNAL_TRANSPORT Kconfig option is disabled, the debug module uses the Memfault firmware SDK’s own internal HTTP transport. Transporting Memfault data through a pre-established transport can save overhead related to maintaining multiple connections at the same time. Currently, only the AWS IoT configuration supports this configuration.

Configuration options

CONFIG_DEBUG_MODULE_MEMFAULT_USE_EXTERNAL_TRANSPORT - Configuration for transfer of Memfault data

This option, if enabled, makes the debug module trigger events carrying Memfault data. This data can be routed through an external transport to Memfault cloud, for example, through AWS IoT, Azure IoT Hub, or nRF Cloud.

CONFIG_DEBUG_MODULE_MEMFAULT_HEARTBEAT_INTERVAL_SEC - Configuration for nRF Connect SDK Memfault metrics tracking interval

This option sets the time interval for tracking nRF Connect SDK Memfault metrics.

CONFIG_DEBUG_MODULE_MEMFAULT_CHUNK_SIZE_MAX - Configuration for maximum size of transmitted packets

This option sets the maximum size of packets transmitted over the configured custom transport.

Module configurations

To enable Memfault, you must set the following mandatory options:

To get more detailed stack traces in coredumps sent to Memfault, you can increase the values of the following options:

Coredumps are by default stored to non-initialized RAM. To enable storing to flash, configure the following options:

For extended documentation regarding nRF Connect SDK Memfault integration, see Memfault integration documentation.

Module states

This module has no internal states.

Module events

The asset_tracker_v2/src/events/debug_module_event.h header file contains a list of various events sent by the module.

Dependencies

This application uses the following nRF Connect SDK libraries and drivers:

API documentation

Header file: asset_tracker_v2/src/events/debug_module_event.h
Source files: asset_tracker_v2/src/events/debug_module_event.c
group debug_module_event

Debug module event.

Enums

enum debug_module_event_type

Values:

enumerator DEBUG_EVT_MEMFAULT_DATA_READY

Event carrying Memfault data that should be forwarded via the configured cloud backend to Memfault cloud. Only sent if CONFIG_DEBUG_MODULE_MEMFAULT_USE_EXTERNAL_TRANSPORT is enabled. Payload is of type debug_module_memfault_data.

The payload is heap allocated and must be freed after use.

enumerator DEBUG_EVT_EMULATOR_INITIALIZED

Event sent after boot when building for PC. This event acts as a placeholder for MODEM_EVT_INITIALIZED which is not sent due to the modem module being disabled for PC builds.

enumerator DEBUG_EVT_EMULATOR_NETWORK_CONNECTED

Event sent when the application is built for PC. When built for PC it is assumed that the application is connected to the network.

enumerator DEBUG_EVT_ERROR

An irrecoverable error has occurred in the debug module. Error details are attached in the event structure.

struct debug_module_memfault_data
#include <debug_module_event.h>
struct debug_module_event
#include <debug_module_event.h>

Debug event.

Public Members

int err

Code signifying the cause of error.