CmBacktrace icon indicating copy to clipboard operation
CmBacktrace copied to clipboard

问题出现打印输出时,Show more call stack info by run这条信息并没有打印出定位的地址数据

Open xiongzhizhu opened this issue 6 years ago • 4 comments

你好,请问下我定位问题时,打印如下 0> Firmware name: iHome, hardware version: V1.0.0, software version: V0.1.0 0> Fault on interrupt or bare metal(no OS) environment 0> ===== Thread stack information ===== 0> addr: 20002FB0 data: 00000038 0> addr: 20002FB4 data: 0000001C 0> addr: 20002FB8 data: 00000003 0> addr: 20002FBC data: 000145F1 0> addr: 20002FC0 data: 00000000 0> addr: 20002FC4 data: 000135BB 0> addr: 20002FC8 data: 000145F2 0> addr: 20002FCC data: 01000000 0> addr: 20002FD0 data: 00000425 0> addr: 20002FD4 data: 00014839 0> addr: 20002FD8 data: 1FFFF58C 0> addr: 20002FDC data: 1FFFF4E0 0> addr: 20002FE0 data: 000105DD 0> addr: 20002FE4 data: 00000000 0> addr: 20002FE8 data: 20003000 0> addr: 20002FEC data: 1FFFF52C 0> addr: 20002FF0 data: 00000000 0> addr: 20002FF4 data: 00000000 0> addr: 20002FF8 data: 00016E74 0> addr: 20002FFC data: 00000EDB 0> ==================================== 0> =================== Registers information ==================== 0> R0 : 00000038 R1 : 0000001C R2 : 00000003 R3 : 000145F1 0> R12: 00000000 LR : 000135BB PC : 000145F2 PSR: 01000000 0> ============================================================== 0> Show more call stack info by run: addr2line -e iHome.axf -a -f s

Show more call stack info by run: addr2line -e iHome.axf -a -f s 这行显示的和示例中显示的不一样,没法用addr2line工具定位,是以为没有上系统吗?

xiongzhizhu avatar Nov 05 '19 07:11 xiongzhizhu

你的移植可能有问题,好像没有配置对 code 段

https://github.com/armink/CmBacktrace/blob/master/cm_backtrace/cmb_def.h#L70

armink avatar Nov 05 '19 07:11 armink

你的移植可能有问题,好像没有配置对 code 段

https://github.com/armink/CmBacktrace/blob/master/cm_backtrace/cmb_def.h#L70 我的移植是这样的 image #if defined(__CC_ARM) /* C stack block name, default is STACK / #ifndef CMB_CSTACK_BLOCK_NAME #define CMB_CSTACK_BLOCK_NAME ARM_LIB_STACK //STACK #endif / code section name, default is ER_IROM1 / #ifndef CMB_CODE_SECTION_NAME #define CMB_CODE_SECTION_NAME ER_m_text //ER_IROM1 #endif #elif defined(ICCARM) / C stack block name, default is 'CSTACK' / #ifndef CMB_CSTACK_BLOCK_NAME #define CMB_CSTACK_BLOCK_NAME "CSTACK" #endif / code section name, default is '.text' */ #ifndef CMB_CODE_SECTION_NAME #define CMB_CODE_SECTION_NAME ".text" #endif #elif defined(GNUC)

如果那两处采用默认的,用keil编译则会报错,错误如下: linking... .\Objects\iHome.axf: Error: L6218E: Undefined symbol Image$$ER_IROM1$$Base (referred from cm_backtrace.o). .\Objects\iHome.axf: Error: L6218E: Undefined symbol Image$$ER_IROM1$$Limit (referred from cm_backtrace.o). .\Objects\iHome.axf: Error: L6218E: Undefined symbol Image$$STACK$$ZI$$Base (referred from cm_backtrace.o). .\Objects\iHome.axf: Error: L6218E: Undefined symbol Image$$STACK$$ZI$$Limit (referred from cm_backtrace.o). Finished: 0 information, 0 warning and 4 error messages. ".\Objects\iHome.axf" - 4 Error(s), 419 Warning(s). 请问这两处具体是什么意思呢?

xiongzhizhu avatar Nov 05 '19 07:11 xiongzhizhu

image 采用NXP的MKL16Z芯片,看见MKL16Z128xxx4_flash.scf文件中是如图上写的

xiongzhizhu avatar Nov 05 '19 08:11 xiongzhizhu

我碰到了相同现象的问题,原因是打印函数SEGGER_RTT_printf的问题,输出调用栈信息是通过%.*s方式打印的,但是该打印函数不支持这种方式。通过更改打印方式解决了该问题

jason-wlm avatar Sep 29 '20 10:09 jason-wlm