易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 485|回复: 0
收起左侧

linux centos 开启coredump

[复制链接]
发表于 2022-10-26 11:29:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
在开发中,coredump会输出珍贵的调试信息,但在linux下默认是关闭的,所以,要手动去把它打开。
+ O+ R% {: u+ x; g8 m, L0 D执行以下脚本,退出后重新登录即可,重新登录后执行ulimit -c,如果出来的是unlimited,就是已经打开了,且不限制coredump生成的core文件大小% V- P& F0 R3 h. t

( g# N. O8 g. p# q0 T( D#!/bin/bash
0 I5 ~1 E# e5 T# M5 j) i
- ^4 |+ ]# a7 z+ ~### Filename: coredumpshell.sh. f) S7 D4 o- g7 P5 h" ^
### Description: enable coredump and format the name of core file on centos system
/ I  n! ~6 N0 ]" ~" L0 ^
4 k/ t( N+ k6 v0 ?4 u1 M2 E3 U3 L# enable coredump whith unlimited file-size for all users
1 B3 b# M' m$ |; eecho -e "\n# enable coredump whith unlimited file-size for all users\n* soft core unlimited" >> /etc/security/limits.conf- X$ B. i" k( W% M: R$ t6 _

. g" N8 K) d. J# set the path of core file with permission 777 8 i: K9 `. q) y0 O" S) K
cd /mydata && mkdir corefile && chmod 777 corefile/ Z  P' o$ |5 _% C
% C* g9 @: n5 ~( Q; B
# format the name of core file.   
( K. |7 z9 H% S# %% – 符号%7 d2 \( ^2 n2 ~# {
# %p – 进程号# C2 X% r9 W4 g! w% x
# %u – 进程用户id
; J6 e( j4 Q. Y) Q+ I9 Q# %g – 进程用户组id
& F; c! E1 P- X2 f3 {1 v# %s – 生成core文件时收到的信号
. J- ]" p; Y2 X) Z+ n# e( \# %t – 生成core文件的时间戳(seconds since 0:00h, 1 Jan 1970). X8 I# h2 Y/ P
# %h – 主机名( [. i1 O7 V9 x
# %e – 程序文件名# d" T/ K% K; u+ G; k
echo -e "/mydata/corefile/core-%e-%s-%u-%g-%p-%t" > /proc/sys/kernel/core_pattern
/ P, l% W3 @/ m3 [1 z- h( |: e0 T1 ?. T& l% U' \) b8 I
# for centos7 system(update 2017.2.3 21:44)3 ^9 e0 S' e& b6 T
echo -e "/mydata/corefile/core-%e-%s-%u-%g-%p-%t" > /etc/sysctl.conf" z) x' P' U! G3 L' u# U' S* L3 x
0 }7 D* f( @5 G8 C1 Y8 J9 D* o2 F
# suffix of the core file name, g6 W* Z4 F& W9 h; D- j  c
echo -e "1" > /proc/sys/kernel/core_uses_pid
% ]) Y) l8 e& }4 Z( b
4 N% u" |( v3 J3 P& `
1 J: U: X% N' mcentos下
  @  g+ m) Q# [4 v生成方式
* g4 l2 U) `( r) `) e0 s## 查看是否开启,0表示没有开启,>0表示生成最大的coredump的大小(单位kb),可使用参数unlimited取消core文件大小的的限制9 d4 u7 v, y0 |# {( Z0 p4 w
ulimit -c : t1 g1 h+ \$ h$ X4 q
ulimit -c unlimited  
# c4 ^% i- D! [8 lulimit -c 0
( z0 k. k5 c, H/ U6 S  pulimit -a
) y: Y+ C' ?/ F( m6 D转储文件命名规范$ c& W" p9 e  L% q
## 设置是否添加pid作为扩展,1:添加 0:不添加
) z* ^/ d# o' {, p: ^cat /proc/sys/kernel/core_uses_pid
1 d0 S" o( s/ y7 D4 d: G## 设置文件产生时的命名, o( y4 A: d+ @" Z
cat /proc/sys/kernel/core_pattern' U" M5 W  O7 ?
##通常这样设置:$ g- m4 T- b) {7 s1 M
/opt/tmp/core/core-%e-%s-%u-%g-%p-%t
9 G7 E5 b/ s4 V6 v2 Y/ \参数介绍
6 ]0 X  [; Y( Z9 |  `# Z%p : insert pid into filename                             # 添加pid
5 T: \; @+ Q; N& w; V%u : insert current uid into filename                     # 添加当前uid1 i( c5 `0 t0 J; k! B- y
%g : insert current gid into filename                     # 添加当前gid! y2 u$ F) s2 L4 ^
%s : insert signal that cased the coredump into the file  # 添加导致产生core的信号, L, Q/ w" _  ~5 E" s( R: m
%t : insert UNIX time that the coredump occurred into file# 添加core文件生成时的unix时间
" a. Q+ E/ i$ A! d+ d( q& e%h : insert hostname where the coredump happened into file# 添加主机名
, \, Y$ S# U2 N%e : insert coredumping executablename into file          # 添加命令名- P* M4 A5 F6 F& Q0 q9 S
产生core的测试
$ _% C7 ]% d7 C5 S$ d% W7 I/ C# n) Hkill -s SIGSEGV $$  |" [1 b7 E6 G
Linux上的信号  D. L: s1 w4 H
发生coredump一般都是在进程收到某个信号的时候,Linux上现在大概有60多个信号,可以使用kill -l命令全部列出来。& y7 ~% o6 }9 C7 R
1 O4 h, H8 g& Q( O$ a1 D8 d7 o
针对特定的信号,应用程序可以写对应的信号处理函数。如果不指定,则采取默认的处理方式,默认处理是coredump的信号如下:. t+ ?5 W2 |: Y9 Z) _
" B9 N$ i( A4 J( }4 ]
3) SIGQUIT 4) SIGILL 6) SIGABRT 8) SIGFPE 11) SIGSEGV& j/ _8 n: O# f* L* D  [
7) SIGBUS 31) SIGSYS 5) SIGTRAP 24) SIGXCPU 25) SIGXFSZ
" z! N. z6 u# H3 Y; G. x2 @6 [3 d29) SIGIOT
/ I5 F; r. g, p) n* }. ]core的使用& m; v4 b& t! p1 `
编译的程序如果不添加-g,在core中不会有行的信息,如果希望产生更详细的core文件,编译程序时需要指定-g。# C# k! X  l) j# @! V- [* k
" H3 j( \6 ]. c# E  N
gdb execute corefile
% ?9 _( [5 S. t9 X8 v8 w, Qgdb 基本使用命令
- I: K2 ?# G2 Y1 i0 a# 设置断点1 B6 l8 _& v; F  y% g; B; S
b 行号|函数名
$ b3 Q; o" s9 ?  D& V; o# 删除断点& p4 T& B+ w/ d9 a: H
delete 断点编号
* _. s# M2 Z; x% ]# 禁用断点
  n( E  V( t1 z6 W/ }0 \6 Zdisable 断点编号
+ x# V1 z! r+ R# 弃用断点
) K. x. F5 I( Uenable 断点编号1 E, Y- U- J7 ?6 O( k
# 单步跟踪! d! w8 a, X/ Z6 ~9 [% F
next
4 v% U" V* |% I2 t! T7 H+ h# 单步跟踪
$ a8 V2 @; q4 w* |8 Jstep
" @! R- n; h( v8 \# 打印变量
! i1 `4 k' [0 y! uprint 变量名
3 J) Z5 ~( e! _" X( V# 设置变量0 G6 N3 l( o8 Y/ e" C7 |: c
set var=value1 b; G' U/ J& M8 f6 [' W
# 查看变量类型$ C) ^/ G6 @* T
ptype var" F' r: `  e" m" u0 w4 h  L  ^% M9 c
# 顺序执行到结束
" v3 y" H7 s+ O2 \& |count( c6 K3 j$ _2 ?: \
# 顺序执行直到某一行% U, v  U% S6 e' [
util lineno
# T5 e- D* z4 M' ~, H" d# 打印堆栈信息
" a5 ?3 W0 Z/ [; Q8 }, jbt
- L- E# W  s  t7 ?' A' @" g8 K4 F
. g, T0 J' d, [3 C' Y& N# P
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:37 , Processed in 0.049808 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表