您的位置 首页 应用

学会用core dump调试程序过错

学会用core dump调试程序错误-. 在嵌入式系统中,有时core dump直接从串口打印出来,结合objdump查找ra和epa地址,运用栈回溯,可以找到程序出错的地方。

最来在项目中遇到大型程序呈现SIGSEGV ,一向不知道用core dump东西来调试程序,花了近一周的时刻,才定位问题,老迈很气愤,成果很严重,呵呵,过后细心学习了这块的常识,了解一点core dump的常识。

在运用半导体作为内存的资料前,人类是运用线圈当作内存的资料(发明者为王安),线圈就叫作core ,用线圈做的内存就叫作“core memory”。(线圈的单词应该是coil,呵呵)现在,半导体工业澎勃开展,现已没有人用线圈当内存了,不过,在许多情况下,人们仍是把内存叫作“core”。 所以留意了:这儿的core不是中心,而是内存。不过结合实际来看,如同也有点“内核所占内存”的意思。 
      core dump又是什么东东? 咱们在开发(或运用)一个程序时,最怕的便是程序莫明其妙地挂掉。尽管体系没事,但咱们下次仍或许遇到相同的问题。所以,这时操作体系就会把程序挂掉时的 内存内容写入一个叫做core的文件里(这个写入的动作就叫dump,dump的英语意思是废物、倾倒。从这儿来看,这些内存的内容是程序过错运转的成果,所以算是废物,把他弄出来就比如从大的内存池里“倾倒”。),以便于咱们调试。这个进程,因而叫做core dump。

1. 在嵌入式体系中,有时core dump直接从串口打印出来,结合objdump查找ra和epa地址,运用栈回溯,能够找到程序犯错的当地。

2. 在一般Linux体系中,默许是不会产生core dump文件的,经过ulimit -c来查看core dump文件的巨细,一般开端是0,能够设置core文件巨细,ulimit -c 1024(kbytes单位)或许ulimit -c unlimited。

3. core dump文件输出设置,一般默许是当时目录,能够在/proc/sys/kernel中找到core-user-pid,经过

echo “1” > /proc/sys/kernel/core-user-pid使core文件名加上pid号,还能够用

mkdir -p /root/corefile

echo “/root/corefile/core-%e-%p-%t” > /proc/sys/kernel/core-pattern操控core文件保存方位和文件名格局。

以下是参数列表:
    %p – insert pid into filename 增加pid
    %u – insert current uid into filename 增加当时uid
    %g – insert current gid into filename 增加当时gid
    %s – insert signal that caused the coredump into the filename 增加导致产生core的信号
    %t – insert UNIX time that the coredump occurred into filename 增加core文件生成时的unix时刻
    %h – insert hostname where the coredump happened into filename 增加主机名
    %e – insert coredumping executable name into filename 增加指令名

4. 用gdb查看core文件:
下面咱们能够在产生运转时信号引起的过错时产生core dump了.编译时加上-g
产生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行.
gdb [exec file] [core file]
如:
gdb ./test test.core
在进入gdb后, 用bt指令查看backtrace以查看产生程序运转到哪里, 来定位core dump的文件行.

5. 给个比如

test.c

void a()

{

char *p = NULL;

printf(“%d/n”, *p);

}

int main()

{

a();

return 0;

}

编译 gcc -g -o test test.c

运转 ./test

报segmentaTIon fault(core dump)

gdb ./test test.core假如生成的是test.core.

 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/99838.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部