一般来说接触ESP32的backtrace功能基本都是在固件跑崩的情况下.ESP-IDF自己打印崩溃瞬间的调用堆栈以及寄存器值来分析问题用的.

但是有时候,固件在正常运行,但是就有查看某一时刻的调用堆栈的需求,这个时候就需要手动让他打印backtrace来给我们分析调用堆栈.对应的函数是esp-idf\components\xtensa\debug_helpers.c里的esp_backtrace_print().

函数的解释是这样的:

/**
 * @brief Print the backtrace of the current stack
 *
 * @param depth The maximum number of stack frames to print (should be > 0)
 *
 * @return
 *      - ESP_OK    Backtrace successfully printed to completion or to depth limit
 *      - ESP_FAIL  Backtrace is corrupted
 */
esp_err_t esp_backtrace_print(int depth);

在需要查看调用堆栈的地方调用这个函数,例如这样:

在运行到这个地方时,就会打印出当时的调用堆栈,串口log上是这样的.