开发或测试过程中一直有遇到 native debug的情况,与java debug信息清楚的反应出调用的堆栈及对应的文件和函数相比,native debug的信息则只是列举了寄存器信息以及pc指针和so库,加之我们本身对linux不是很熟悉,不清楚对应的具体含义以及如何像elastos上进行反编译的方法,因此往往将信息丢弃。最近在解决一个类似的问题时候,无意中发现网上有人写了一个python脚本panic.py,反编译源码信息。具体操作如下:
1.debug信息如下:
3.将拷贝出的信息存到一个文本文件中(如log.txt),并放在脚本panic.py对应的目录下,目前放在项目的script目录下。
4.命令行中执行以下命令: ./panic.py msm7627_surf log.txt 其中"./panic.py"对应的则是执行的脚本,"msm7627_surf "为当前product的名称,"log.txt"则为保存的debug文本。
5.输出信息如下:
jpege_engine_sw_upscale.c:1434jpege_engine_sw_fetch_chroma_to_lines_buffer jpege_engine_sw_upscale.c:1634jpege_engine_sw_scale_mcu_lines
jpege_engine_sw_upscale.c:848 jpege_engine_sw_fetch_dct_scaled_mcu
jpege_engine_sw.c:583 jpege_engine_sw_encode pthread.c:188
__thread_entry pthread.c:324 pthread_create
2.将fault addr以下部分至堆栈so信息结束本分拷出,如下图:
3.将拷贝出的信息存到一个文本文件中(如log.txt),并放在脚本panic.py对应的目录下,目前放在项目的script目录下。
4.命令行中执行以下命令: ./panic.py msm7627_surf log.txt 其中"./panic.py"对应的则是执行的脚本,"msm7627_surf "为当前product的名称,"log.txt"则为保存的debug文本。
5.输出信息如下:
jpege_engine_sw_upscale.c:848 jpege_engine_sw_fetch_dct_scaled_mcu
__thread_entry pthread.c:324 pthread_create