[求助]crash 工具

sipangziq
sipangziq 05月30日 字数 400

我现在有个需求,别的rtos下得trace,arm核。我能拿到trap时寄存器的值,还有当前task里堆栈的内容,也只能拿到这些。我的需求是要用这些解析出调用栈。一个方法是我可以用Trace32的模拟器,填入寄存器和栈的内容,让trace32帮我恢复,填入数据虽然可以脚本化,还是麻烦。

谁用crash工具分析过coredump?是不是我trap的时候按照一定格式生产一个文件,用crash命令就行,这种coredump转储文件格式怎么定义?有啥好的建议吗?谢谢!

Embedded 嵌入式系统
13 个回复
intron
内含子 05月30日

GDB 不就是做这些事情的吗?

如果是单片机,用 OpenOCD + GDB 就可以看见堆栈情况。

【 在 sipangziq (sipangziq) 的大作中提到: 】

: 标  题: [求助]crash 工具

: 发信站: 水木社区 (Sat May 30 10:54:14 2020), 站内

: 我现在有个需求,别的rtos下得trace,arm核。我能拿到trap时寄存器的值,还有当前task里堆栈的内容,也只能拿到这些。我的需求是要用这些解析出调用栈。一个方法是我可以用Trace32的模拟器,填入寄存器和栈的内容,让trace32帮我恢复,填入数据虽然可以脚本化,还是麻烦。

: 谁用crash工具分析过coredump?是不是我trap的时候按照一定格式生产一个文件,用crash命令就行,这种coredump转储文件格式怎么定义?有啥好的建议吗?谢谢!

: --

sipangziq
sipangziq 05月30日

OpenOCD 是要用仿真器吧?

我这些寄存器信息是从串口log中提取出来的,要是能必现,而且能连仿真器,就好办了。

【 在 intron 的大作中提到: 】

: GDB 不就是做这些事情的吗?

: 如果是单片机,用 OpenOCD + GDB 就可以看见堆栈情况。

band812
th 05月31日

能复现吗?如果能,并且是内核的话,WARN_ON(1)可以直接打印出调用栈。

如果希望能看到调用栈的函数的参数的值的话,DEBUG可以产生coredump,用crash工具可以分析coredump,获得需要的信息。

【 在 sipangziq (sipangziq) 的大作中提到: 】

: 我现在有个需求,别的rtos下得trace,arm核。我能拿到trap时寄存器的值,还有当前task里堆栈的内容,也只能拿到这些。我的需求是要用这些解析出调用栈。一个方法是我可以用Trace32的模拟器,填入寄存器和栈的内容,让trace32帮我恢复,填入数据虽然可以脚本化,还是麻烦。

: 谁用crash工具分析过coredump?是不是我trap的时候按照一定格式生产一个文件,用crash命令就行,这种coredump转储文件格式怎么定义?有啥好的建议吗?谢谢!

intron
内含子 06月03日

都什么年代了,还说“仿真器”一词。

ST-Link、JLink、CMSIS-DAP 等等都是下位机与上位机

之间的连接工具而已,不具有仿真功能。

【 在 sipangziq (sipangziq) 的大作中提到: 】

: 标  题: Re: [求助]crash 工具

: 发信站: 水木社区 (Sat May 30 22:14:44 2020), 站内

: OpenOCD 是要用仿真器吧?

: 我这些寄存器信息是从串口log中提取出来的,要是能必现,而且能连仿真器,就好办了。

: 【 在 intron 的大作中提到: 】

: : GDB 不就是做这些事情的吗?

: : 如果是单片机,用 OpenOCD + GDB 就可以看见堆栈情况。

: :

: --

spadger
echo 06月03日

仿真器 只是个名字而已,就跟手里的苹果不一定能吃,老婆饼里也没有老婆一个意思。

【 在 intron (内含子) 的大作中提到: 】

: 都什么年代了,还说“仿真器”一词。

: ST-Link、JLink、CMSIS-DAP 等等都是下位机与上位机

: 之间的连接工具而已,不具有仿真功能。

: ...................

intron
内含子 06月03日

话说我不久前开掉一个把 ST-Link 叫作“仿真器”

的 50 岁老先生。此人自以为工作经验丰富,拒看

厂家官方文档。一把年纪了,做的活却不怎么样。

【 在 spadger (imdx) 的大作中提到: 】

: 标  题: Re: [求助]crash 工具

: 发信站: 水木社区 (Wed Jun  3 07:02:31 2020), 站内

: 仿真器 只是个名字而已,就跟手里的苹果不一定能吃,老婆饼里也没有老婆一个意思。

: 【 在 intron (内含子) 的大作中提到: 】

: : 都什么年代了,还说“仿真器”一词。

: : ST-Link、JLink、CMSIS-DAP 等等都是下位机与上位机

: : 之间的连接工具而已,不具有仿真功能。

: : ...................

: --

spadger
echo 06月03日

做硬件不看文档,确实该被淘汰。

【 在 intron (内含子) 的大作中提到: 】

: 话说我不久前开掉一个把 ST-Link 叫作“仿真器”

: 的 50 岁老先生。此人自以为工作经验丰富,拒看

: 厂家官方文档。一把年纪了,做的活却不怎么样。

: ...................

intron
内含子 06月04日

此人还在我的上司面前抱怨,

说我做的电路板(初版)上有一根飞线,

NXP 的 RT105x 单片机才是国内主流而 STM32

不是云云。我回应说:如果 STM32 不是主流,

国内那么多公司仿制它为了什么?

我觉得做技术工作要有个严谨的态度。

现在做硬件的的确处于供需两不旺的尴尬状态:

一方面企业招到合适的工程师非常难,

另一方面工程师找到合适的工作岗位也很难。

但是在美国对抗中国的背景下,

还是有许多有钱的公司是想重金聘用高手的。

高薪要有好的技能与之对应。

相比于互联网公司纷纷裁员,硬件和底层软件

从业者也应自强才好。

【 在 spadger (imdx) 的大作中提到: 】

: 标  题: Re: [求助]crash 工具

: 发信站: 水木社区 (Wed Jun  3 18:12:32 2020), 站内

: 做硬件不看文档,确实该被淘汰。

: 【 在 intron (内含子) 的大作中提到: 】

: : 话说我不久前开掉一个把 ST-Link 叫作“仿真器”

: : 的 50 岁老先生。此人自以为工作经验丰富,拒看

: : 厂家官方文档。一把年纪了,做的活却不怎么样。

: : ...................

: --

ffxz
非飞·奋发中 06月04日

这个好像也和你用的RTOS相关,我们/RT-Thread刚适配了trace32,这样就可以用trace32来分析dump下来的memory数据,从而看到每个任务都分别运行在哪里了

【 在 sipangziq 的大作中提到: 】

: 我现在有个需求,别的rtos下得trace,arm核。我能拿到trap时寄存器的值,还有当前task里堆栈的内容,也只能拿到这些。我的需求是要用这些解析出调用栈。一个方法是我可以用Trace32的模拟器,填入寄存器和栈的内容,让trace32帮我恢复,填入数据虽然可以脚本化,还是麻烦。

: 谁用crash工具分析过coredump?是不是我trap的时候按照一定格式生产一个文件,用crash命令就行,这种coredump转储文件格式怎么定义?有啥好的建议吗?谢谢!

newre
民工六草 06月04日

gdb,  python

【 在 sipangziq 的大作中提到: 】

: 我现在有个需求,别的rtos下得trace,arm核。我能拿到trap时寄存器的值,还有当前task里堆栈的内容,也只能拿到这些。我的需求是要用这些解析出调用栈。一个方法是我可以用Trace32的模拟器,填入寄存器和栈的内容,让trace32帮我恢复,填入数据虽然可以脚本化,还是麻烦。

: 谁用crash工具分析过coredump?是不是我trap的时候按照一定格式生产一个文件,用crash命令就行,这种coredump转储文件格式怎么定义?有啥好的建议吗?谢谢!

fenshui
fenshui 06月11日

crash 工具是redhat 公司开发的,其原理是用了 kexec  和  kdump   机制,在内核oops ,panic 时在最后的内核代码处理系统错误时增加了相应的代码,内核代码编译成了一个elf 格式的文件,在运行时会放在内存的某个地址,在内核出现问题时,就会把这个内存地址的elf 文件写到外设磁盘的文件上,也就是coredump 文件,然后用crash 解析,这个一般需要编译内核时打开debug 选项,还有其它选项,现在android 平台都实现的相应的机制,mtk ,高通有各种实现,,如果只是要看调用栈,寄存机器信息,androdi 都有些简单通用实现,保留内存一段空间,kernel panic 时,把寄存器,需要的信息直接写到保留的内存,系统重新启动时,再在用户空间读取哪块保留的内存中的内容,android 提供的接口好像是 cat /proc/apanic

Ylong
沧海云龙 06月11日

是不是可以参考sysrq 啊,那玩意能造crash ,也能打印调用栈。不过跨系统移植的话估计工作量有点大。

【 在 sipangziq 的大作中提到: 】

: 我现在有个需求,别的rtos下得trace,arm核。我能拿到trap时寄存器的值,还有当前task里堆栈的内容,也只能拿到这些。我的需求是要用这些解析出调用栈。一个方法是我可以用Trace32的模拟器,填入寄存器和栈的内容,让trace32帮我恢复,填入数据虽然可以脚本化,还是麻烦。

: 谁用crash工具分析过coredump?是不是我trap的时候按照一定格式生产一个文件,用crash命令就行,这种coredump转储文件格式怎么定义?有啥好的建议吗?谢谢!

fyzjsmth
封印之剑 06月17日

几个月前老大还推荐我们看你们的代码,怎么做架构

发自「今日水木 on iPhone 8」

【 在 ffxz 的大作中提到: 】

: 这个好像也和你用的RTOS相关,我们/RT-Thread刚适配了trace32,这样就可以用trace32来分析dump下来的memory数据,从而看到每个任务都分别运行在哪里了

: --

: \- http://www.rt-thread.org

: RT-Thread启动下一代实时操作系统的演化...