【FAQ】全志R329如何进行coredump的配置与调试?
-
问题背景
应用调试时出现段错误的情况。
程序运行过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做CoreDump。
可以认为CoreDump是内存快照,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时记录下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。CoreDump对于调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而CoreDump文件可以再现程序出错时的情景。
问题描述
客户基于btmanager开发蓝牙应用或者调试其他应用时,有时候会遇到崩溃的问题。
只看到应用退出了,然后留下一行Segmentation fault的错误,却没有其他更多的信息。
比如:问题分析
报错只有 Segmentation fault,而不是Segmentation fault (core dumped),说明没有使用CoreDump。
解决办法
SDK配置coredump和gdb
m menuconfig进入配置菜单(1)Global build settings —>
[*] Enable process core dump support
(2)Global build settings —>
Binary stripping method (none) —>
(3)Development —>
<*> gdb… GNU Debugger
小机端配置
(1)ulimit -c unlimited
表示在异常时产生core dump文件,不对core dump文件的大小进行限制。
(2)echo /tmp/coredump > /proc/sys/kernel/core_pattern
设置产生的core文件的文件名以及路径。例如:
出现Segmentation fault 之后,会有(core dumped)的字样。
对coredump的简单debug
(1)使用gdb调试coredump文件。
gdb xxxx /tmp/coredump
xxxx是具体的应用程序,比如/usr/bin/bt_test(2)在gdb 终端中输入bt
输入bt之后,可以查看堆栈的信息。注意:这里的bt不是蓝牙的意思。如下图所示:
这样就可以大致查看出错的点,方便分析调试。 -
-
-
-
-
Copyright © 2023 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号