Herramientas y técnicas para depurar firmware NRF
Comenzar arrow_downwardAntes de depurar, configura el proyecto para obtener la mejor experiencia de debugging.
Selecciona "Optimize for debugging (-Og)" en la configuración de build para habilitar símbolos de debug.
build/ y recompila. Los cambios de Kconfig pueden no aplicarse sin un build limpio.
El entorno de debugging de VS Code con nRF Connect ofrece herramientas avanzadas.
count > 100 && error_flag == true
Value: {my_variable}
Herramientas adicionales para inspeccionar el estado del sistema.
Mapa de memoria de registros de hardware. Lee y escribe registros directamente.
Secuencia de llamadas a funciones hasta el punto actual. Navega por el historial.
Todos los threads de Zephyr, sus estados, prioridades y uso de stack.
Depurar sin detener funciones críticas como BLE o PWM.
Cómo interpretar y resolver errores comunes en el desarrollo.
Regla de oro: empieza por el PRIMER error en el log. Los errores posteriores suelen ser consecuencia del primero.
CMakeOutput.log y CMakeError.log
build/CMakeFiles/CMakeOutput.log
build/CMakeFiles/CMakeError.log
Cuando el firmware crashea, obtienes una dirección de memoria. Usa addr2line para convertirla a archivo:línea.
-a
-f
-p
Captura el estado completo del programa en el momento del crash.
#CD:BEGIN# hasta #CD:END#coredump_serial_log_parser.py
coredump_gdbserver.py
arm-zephyr-eabi-gdb zephyr.elf
bt
info registers
p <var>
x <addr>
Cómo resolver el error "Undefined reference to __device_dts_ord_XX".
El código referencia un dispositivo del devicetree que existe en la descripción pero no tiene driver activo.
status = "disabled"build/zephyr/include/generated/devicetree_generated.hbuild/zephyr/zephyr.dtsHerramientas de hardware para diagnosticar problemas que el software no puede detectar.
Señales digitales: UART, I2C, SPI
Consumo de corriente + 8ch logico
Voltaje, continuidad, resistencia
Formas de onda, integridad de señal
Verifica voltajes con multímetro. Asegúrate de que el regulador entrega el voltaje correcto.
Pon toggles de GPIO en puntos clave del código y observa con analizador lógico.
El PPK2 muestra consumo en tiempo real. Picos anormales indican problemas.
Plataforma de observabilidad para dispositivos en producción.
zephyr.elf a Memfault para que pueda simbolizar los crashes y mostrar funciones en lugar de direcciones.
mflt test heartbeat
Enviar heartbeat de prueba
mflt export
Exportar datos pendientes
Cuándo usar cada herramienta de debugging.
| Herramienta | Caso de uso | Tipo |
|---|---|---|
| VS Code Debugger | Debugging interactivo, paso a paso | Software |
| Monitor Mode | Debug sin perder conexión BLE/PWM | Software |
| addr2line | Convertir direcciones a código fuente | CLI |
| Core Dump + GDB | Análisis post-mortem de crashes | CLI |
| Power Profiler Kit II | Consumo + señales digitales | Hardware |
| Memfault | Debugging remoto, OTA, métricas | Cloud |
Compila con -Og y habilita DEBUG_THREAD_INFO para mejor experiencia de debug.
Empieza por el primer error. Usa addr2line para crashes y core dump para análisis profundo.
Memfault permite debugging remoto de dispositivos en producción.
"El 90% de los bugs se resuelven con logs estratégicos y breakpoints condicionales."
No subestimes el poder de un simple LOG_INF en el lugar correcto.
Conversión analógico-digital con el nRF.