找回密码
 注册
查看: 491|回复: 0

linux centos 开启coredump

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-10-26 11:29:14 | 显示全部楼层 |阅读模式
在开发中,coredump会输出珍贵的调试信息,但在linux下默认是关闭的,所以,要手动去把它打开。
/ E( |3 V4 h9 r8 @; X, P执行以下脚本,退出后重新登录即可,重新登录后执行ulimit -c,如果出来的是unlimited,就是已经打开了,且不限制coredump生成的core文件大小  L' D! ^/ o/ N* G6 r2 ^. b) @
6 L* {7 e6 s# K8 @8 q
#!/bin/bash
1 c9 p7 v( E" I3 U! l3 Z3 B
0 t  Q+ x2 J  N: |6 b8 d7 n2 j### Filename: coredumpshell.sh  y: I+ g& E8 E
### Description: enable coredump and format the name of core file on centos system
) I7 ]! e( U3 |  `/ {5 K& S% M. W) Q# @# U" l$ f1 r$ F1 S& O2 \4 u
# enable coredump whith unlimited file-size for all users
, b$ J/ m+ U( b; c1 p( decho -e "\n# enable coredump whith unlimited file-size for all users\n* soft core unlimited" >> /etc/security/limits.conf2 Y/ E3 q6 [7 \( P2 Z7 O+ N3 ^
0 M" T7 V, {7 e; r" Y
# set the path of core file with permission 777
% h6 o4 S0 d: u8 _7 G$ K3 h! Ycd /mydata && mkdir corefile && chmod 777 corefile1 F" P, n, Y9 e) `: S5 \8 S4 A1 D% N

6 }" ~8 C8 a2 ~& P/ L5 ^4 g# format the name of core file.   4 D) Q& }5 [0 Z2 D7 ?8 O' X: M
# %% – 符号%  V3 p5 r6 q% w4 g9 _% h
# %p – 进程号
6 U' B$ k. e" c* D* z; x) m6 D# %u – 进程用户id* G4 [! C# W& c. z# O- y$ F  O
# %g – 进程用户组id% P3 l7 G' Y! N1 _3 D! J3 W
# %s – 生成core文件时收到的信号
3 k, V1 d& |& x" {" F2 U# %t – 生成core文件的时间戳(seconds since 0:00h, 1 Jan 1970)
9 Y0 M# M* i. T$ K8 n$ g: ]5 @# %h – 主机名# ?- C5 |. u0 D9 e# `
# %e – 程序文件名9 h6 S  `$ a! @3 [
echo -e "/mydata/corefile/core-%e-%s-%u-%g-%p-%t" > /proc/sys/kernel/core_pattern" |9 @, Y4 L2 z9 ^7 H& N

9 d2 Y  \" ~. m5 b7 c# for centos7 system(update 2017.2.3 21:44)
" c3 a8 x$ u. i8 Lecho -e "/mydata/corefile/core-%e-%s-%u-%g-%p-%t" > /etc/sysctl.conf$ u) n8 L: l# g. x: m8 ~

3 `8 `& W3 G9 A& ~1 Y2 M# suffix of the core file name- R' L$ m1 H$ P3 M, A
echo -e "1" > /proc/sys/kernel/core_uses_pid7 P0 q2 F( Q4 [6 P7 e5 ?
/ {5 N% i0 h7 F5 j7 ?  y/ E

) j5 k9 ?1 B5 Scentos下. A5 Z. K; t- \2 c4 {, `0 I0 r
生成方式3 F' e  ?" }) X  L" ?! K2 O- c
## 查看是否开启,0表示没有开启,>0表示生成最大的coredump的大小(单位kb),可使用参数unlimited取消core文件大小的的限制
/ ]1 ?% H( o4 y& w& S6 h. Qulimit -c   \9 ~: x- O$ c# a3 x5 c
ulimit -c unlimited  & m/ y% m3 K- l% a3 o' F' R- D3 P. r
ulimit -c 0
% ?) ^: @+ |- M0 P# k4 Dulimit -a
* s+ R2 m0 K6 G$ z( T$ h转储文件命名规范) J' W2 v3 e# l- D. T) B9 B* Q
## 设置是否添加pid作为扩展,1:添加 0:不添加5 D- s7 c9 r$ C+ f" w# K
cat /proc/sys/kernel/core_uses_pid
) y3 D- {+ E7 p0 t$ L; `7 |## 设置文件产生时的命名$ M6 |9 K% X- X2 h# Q
cat /proc/sys/kernel/core_pattern5 X3 Z  {# Z5 O& I
##通常这样设置:
! p8 i% _5 T" V- I2 B; a( u/opt/tmp/core/core-%e-%s-%u-%g-%p-%t2 q3 K# `6 M' f9 f$ B- R: i1 }
参数介绍: c; g& B5 ?/ c$ U2 F+ s8 ^/ m
%p : insert pid into filename                             # 添加pid
! c6 g4 W; G4 x: T! E& Z! V) [8 ~%u : insert current uid into filename                     # 添加当前uid
; s6 ~4 [$ `; [+ Y' W%g : insert current gid into filename                     # 添加当前gid) F: I/ ^* Z0 R: A* f
%s : insert signal that cased the coredump into the file  # 添加导致产生core的信号
1 F4 A  t+ v6 R4 [8 u. o* x%t : insert UNIX time that the coredump occurred into file# 添加core文件生成时的unix时间) \" S+ _$ g1 m
%h : insert hostname where the coredump happened into file# 添加主机名) E; a% l; G# B0 K3 h7 z& a6 y! A+ t
%e : insert coredumping executablename into file          # 添加命令名- X* r, p9 X7 }& G
产生core的测试1 V! X6 f3 Y  e9 z
kill -s SIGSEGV $$
$ s/ q" i6 x8 R0 @5 z! h5 uLinux上的信号. K! O7 b) ?( ^; {- w/ {0 u- o
发生coredump一般都是在进程收到某个信号的时候,Linux上现在大概有60多个信号,可以使用kill -l命令全部列出来。
8 \" i5 C4 B  X( m7 \! `4 |# ?& |
2 ~. [/ |2 d% i针对特定的信号,应用程序可以写对应的信号处理函数。如果不指定,则采取默认的处理方式,默认处理是coredump的信号如下:0 K$ V2 C+ O& Q. b

  D8 `& D: t' y: @/ \; a- w* n; J3) SIGQUIT 4) SIGILL 6) SIGABRT 8) SIGFPE 11) SIGSEGV! b4 c1 {) f6 l+ x  `
7) SIGBUS 31) SIGSYS 5) SIGTRAP 24) SIGXCPU 25) SIGXFSZ
; m; J9 c4 _0 e$ i9 q, U29) SIGIOT5 I* p$ [& m& c, @+ u
core的使用" n1 e, d# {# k' ^- c
编译的程序如果不添加-g,在core中不会有行的信息,如果希望产生更详细的core文件,编译程序时需要指定-g。
# F1 i2 ~, }. u8 S) e; I# n9 R. @0 \! h" z1 A5 g( a" R
gdb execute corefile  N: f8 o9 K; F8 C$ T
gdb 基本使用命令
' d, s( L+ w$ x" @' w# 设置断点4 G8 ^5 K) X, A) P6 S! `
b 行号|函数名! U! K& m) k, }* k- J% [% c' `
# 删除断点( C9 B9 e( b+ J: b' o  K7 X
delete 断点编号! e9 J; ]* Q$ I9 B" b
# 禁用断点7 u6 t4 L2 p1 s+ a5 o( ?" R; M
disable 断点编号
6 x4 U: w1 s. Y: ]9 K$ N9 F  ~# 弃用断点
4 ]5 `0 v$ {) U4 Lenable 断点编号
2 _0 |0 j5 h" I5 V" O, v2 ~# 单步跟踪1 `$ C1 Y# m1 I6 S$ J( I
next
# ~6 r4 T1 `6 E9 Y# 单步跟踪
. g$ z/ P" s+ m* _2 `; a& Hstep. E; j2 x( ^# K7 e/ H1 U! Y, N4 K
# 打印变量
% _# r% c4 s% S5 s9 wprint 变量名+ x" W! p, N( y& W
# 设置变量- e2 Y# O% S! e" y7 T& M1 {# S
set var=value
8 Y3 p1 o* ]# ], r) v# 查看变量类型7 y& u4 Y' t$ Q: a9 T
ptype var$ o. n  C# Z* \! ?! r) I9 q
# 顺序执行到结束( e1 f2 |0 m7 d
count
8 o$ f- y9 l9 x3 s3 N# 顺序执行直到某一行7 J: \' R$ q! f6 P+ l1 Q
util lineno
. U2 b2 Q- m7 V: B/ i7 `# 打印堆栈信息
: S- T: d  o0 q9 fbt
2 G' ]( k# D. [' X0 L
7 e% C$ s4 }8 C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 02:06 , Processed in 0.019061 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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