77 static void display(
const char *output_path =
nullptr)
81 esp_core_dump_summary_t details;
82 if (esp_core_dump_get_summary(&details) == ESP_OK)
85 string core_dump_summary =
86 StringPrintf(
"Task:%s (%d) crashed at PC %08x\n",
87 details.exc_task, details.exc_tcb, details.exc_pc);
88 core_dump_summary += StringPrintf(
"Registers:\n");
89 for (
size_t idx = 0; idx < 16; idx += 4)
93 "A%02zu: 0x%08x A%02zu: 0x%08x A%02zu: 0x%08x A%02zu: 0x%08x\n",
94 idx, details.ex_info.exc_a[idx],
95 idx + 1, details.ex_info.exc_a[idx + 1],
96 idx + 2, details.ex_info.exc_a[idx + 2],
97 idx + 3, details.ex_info.exc_a[idx + 3]);
100 StringPrintf(
"EXCCAUSE: %08x EXCVADDR: %08x\n",
101 details.ex_info.exc_cause, details.ex_info.exc_vaddr);
102 if (details.ex_info.epcx_reg_bits)
104 core_dump_summary +=
"EPCX:";
105 for (
size_t idx = 0; idx < 8; idx++)
107 if (details.ex_info.epcx_reg_bits & BIT(idx))
110 StringPrintf(
"%zu:%08x ", idx, details.ex_info.epcx[idx]);
113 core_dump_summary +=
"\n";
115 core_dump_summary +=
"Backtrace:";
116 for (
size_t idx = 0; idx < details.exc_bt_info.depth; idx++)
119 StringPrintf(
" 0x%08x", details.exc_bt_info.bt[idx]);
120 if (details.exc_bt_info.corrupted)
122 core_dump_summary +=
"(corrupted)";
125 core_dump_summary +=
"\n";
126 LOG_ERROR(
"Core dump:\n%s", core_dump_summary.c_str());