linux c 崩溃调试方法

1,gcc -g test.c -o test                       -- 编译时需要加入 -g参数

2,ulimit -c unlimited     设置core文件无限大小;我的开发环境不设置这个,则无core文件生成 

     ulimit -c 0 可关闭 core文件产生

3,运行./test 生成core文件(会在程序运行的目录下生成)     --有些linux系统是生成 core.xxx    (xxx就是你执行的程序的pid)

4,调试 gdb ./test core  

5,使用 bt 指令查看具体段错误位置

(gdb) bt
#0  malloc_consolidate (av=av@entry=0xb7639420 <main_arena>) at malloc.c:4159
#1  0xb7500a09 in _int_malloc (av=av@entry=0xb7639420 <main_arena>, bytes=bytes@entry=65548)
    at malloc.c:3425
#2  0xb75029d8 in __GI___libc_malloc (bytes=65548) at malloc.c:2893
#3  0x0804c39d in ?? ()
#4  0x08052cb3 in ?? ()
#5  0x08052998 in ?? ()
#6  0x0805dc75 in ?? ()
#7  0x0805d54c in ?? ()
#8  0x0805d402 in ?? ()
#9  0x08059ac6 in ?? ()
#10 0x080578b5 in ?? ()
#11 0x08057d81 in ?? ()
#12 0x0805860c in ?? ()
#13 0x0804a689 in ?? ()
#14 0xb74a5af3 in __libc_start_main (main=0x804a5dd, argc=1, argv=0xbfa92a34, init=0x8062b50, 
    fini=0x8062bc0, rtld_fini=0xb77d9300 <_dl_fini>, stack_end=0xbfa92a2c) at libc-start.c:287
#15 0x0804a501 in ?? ()

6,frame 4 (对应的数字) 查看对应具体某个位置相关信息

7,更改core dump生成路径

因为core dump默认会生成在程序的工作目录,但是有些程序存在切换目录的情况,导致core dump生成的路径没有规律,

所以最好是自己建立一个文件夹,存放生成的core文件。

我建立一个 /data/coredump 文件夹,在根目录data里的coredump文件夹。

调用如下命令

echo /data/coredump/core.%e.%p> /proc/sys/kernel/core_pattern

将更改core文件生成路径,自动放在这个/data/coredump文件夹里。

%e表示程序名, %p表示进程id

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值