厦门莫格电气自动化有限公司销售
ABB SPDSI13、SPDSI14
欢迎来电咨询!
SPDSI13、SPDSI14
SPDSI13、SPDSI14
您迈开询价的一小步,我还您成功的一大步。
在Linux下为了调试应用程序可以选择GDB方式运行应用程序进行调试,这种方式也可以调试程序由于接收某些信号导致的异常退出。不过当不具备直接GDB调试环境的情况下,我们也可以使用Core Dumps功能来调试程序异常退出的问题
Core Dumps(核心转储),是操作系统当应用程序进程接收到某些如“segmentation fault(段错误)”或者“illegal instruction(***指令)”等信号而退出停止运行时,会将包含当时内存和寄存器分配以及进程状态等信息写成的一个文件,这个文件可以稍后使用gdb进行分析来判定程序异常退出的原因,更多信息请见’man core’。
本文所演示的平台来自于ToradexApalis TK1 ARM嵌入式平台,这是一个基于nVidiaTgera K1的ARM处理器,支持四核心Cortex-A15和192 CUDA核心的GPU。
2. 准备
a).Apalis TK1 ARM核心版配合Apalis Ixora载板,连接调试串口UART1到开发主机方便调试。
b).Apalis TK1系统使用Toradex LinuxRelease V2.7b1,并安装了nVidiaJetPack R21.5,具体的***和更新方法请参考这里。
3). 查看Linux Kernel配置
由于Toradex ARM模块产品Linux BSP默认kernel是没有打开的,因此可以在TK1模块系统上面通过执行下面命令测试是否kernel已经支持Core Dumps
a). 查看Linux kernel配置参数
------------------------------------
zcat /proc/config.gz | grep CONFIG_ELF_CORE
zcat /proc/config.gz | grep CONFIG_COREDUMP
------------------------------------
c). Apalis TK1 当前V2.7b1版本kernel版本为3.10.40,查看结果如下
------------------------------------
ubuntu@tegra-ubuntu:~$ zcat /proc/config.gz | grepCONFIG_ELF_CORE
# CONFIG_ELF_CORE is not set
ubuntu@tegra-ubuntu:~$ zcat /proc/config.gz | grepCONFIG_COREDUMP
CONFIG_COREDUMP=y
------------------------------------
d). ***kernel源代码修改配置并重新编译
由上面结果可见,当前TK1 kernel配置并未完整支持core dumps功能,需要***对应kernel源代码修改配置并重新编译
./Apalis TK1 V2.7b1kernel源代码***以及重新编译请见这里说明。
./如下修改”.config”
------------------------------------
//标记为”y”
->General Setup ->Configure standardkernel features (expert users) ->Enable ELF core dumps
->userspace binary formats ->Enable core dump support
------------------------------------
./重新编译uImage按照如下方法将其替换到Apalis TK1上面
------------------------------------
//mount Apalis TK1 boot分区
ubuntu@tegra-ubuntu:~$sudomkdir /media/ubuntu/mmcblk0p1
ubuntu@tegra-ubuntu:~$sudomount -t vfat /dev/mmcblk0p1 /media/ubuntu/mmcblk0p1
//备份uimage
ubuntu@tegra-ubuntu:~$cd /media/ubuntu/mmcblk0p1
ubuntu@tegra-ubuntu:~$sudomv uimage k
//***新的uimage到boot分区
ubuntu@tegra-ubuntu:~$sudocp ../uimage .
//重启
ubuntu@tegra-ubuntu:~$sudo reboot
------------------------------------
./重启后再次查看两个配置选项都为”y”配置完成状态了
3). User Space打开core dumps功能并测试
a). User Space打开core dumps 功能
------------------------------------
//开启core dumps并设置***大文件大小,或者为无限大;默认为0,意味着未开启。
ubuntu@tegra-ubuntu:~$ ulimit-c 1024 (or unlimited)
//查看状态
ubuntu@tegra-ubuntu:~$ ulimit -a
core file size (blocks, -c) unlimited
……
------------------------------------
b). 默认情况下在当前目录下生成名为“core“的文件,每次运行会覆盖原来文件,可以通过下面配置更改生成文件的命名,路径以及格式
./将生成文件命名为”core.pid”,pid为应用程序的进程号,目录还是当前目录
------------------------------------
ubuntu@tegra-ubuntu:~$ sudosh -c "echo 1 >/proc/sys/kernel/core_uses_pid"
------------------------------------
./更进一步还可以通过设置下面来配置生成文件的目录和格式,如下设置生成文件目录为“/temp”,格式说明如下
------------------------------------
# %p –进程号
# %u –进程用户id
# %g –进程用户组id
# %s –生成core文件时收到的信号
# %t –生成core文件的时间戳(seconds since 0:00h, 1 Jan 1970)
# %h –主机名
# %e –程序文件名
ubuntu@tegra-ubuntu:~$ sudosh -c "echo "/tmp/core-%e-%s-%u-%g-%p-%t" > /proc/sys/kernel/core_pattern"
------------------------------------
./另外,如果需要使用”suid”或者”gdui”权限运行程序,需要设置如下
------------------------------------
ubuntu@tegra-ubuntu:~$ sudosh -c "echo 2 > /proc/sys/fs/suid_dumpable"
------------------------------------