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

linux centos 开启coredump

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-10-26 11:29:14 | 显示全部楼层 |阅读模式
在开发中,coredump会输出珍贵的调试信息,但在linux下默认是关闭的,所以,要手动去把它打开。, T) {7 B5 t- U  U2 b* d6 r
执行以下脚本,退出后重新登录即可,重新登录后执行ulimit -c,如果出来的是unlimited,就是已经打开了,且不限制coredump生成的core文件大小. P5 x+ v( z+ F% w" \, n$ M
- Z! x5 P/ |' R9 C' @/ e7 N
#!/bin/bash
, B1 Q/ H+ x3 l6 b) i9 F
0 t4 j8 _+ |0 H& g2 ~0 |$ l### Filename: coredumpshell.sh
9 a- O# u( ~1 @1 O2 I8 x+ P### Description: enable coredump and format the name of core file on centos system
3 {( J+ P: P  b0 x1 O0 @- _! S
* v8 f+ e5 M5 t# enable coredump whith unlimited file-size for all users
( L% }4 \) e. O" L% {7 t$ u$ X1 Xecho -e "\n# enable coredump whith unlimited file-size for all users\n* soft core unlimited" >> /etc/security/limits.conf
7 J+ W) i8 E+ Q+ I! \# }  I! A, H" \: L. E6 @7 t9 S" l
# set the path of core file with permission 777
- r4 l) p" O( ^0 w& ~, O6 fcd /mydata && mkdir corefile && chmod 777 corefile
7 u. B$ \3 F- T  u% l0 j! X' a9 {5 Y6 c' m" T
# format the name of core file.   ! M' D2 g. @* R" y0 ]
# %% – 符号%
7 v/ d& D  U# B1 W  ]% i# %p – 进程号: p% y% H1 I0 ]. |# `
# %u – 进程用户id$ v% i7 f. l- N
# %g – 进程用户组id1 _" L* W6 Y! h+ t: e5 X5 w
# %s – 生成core文件时收到的信号; Z! t8 Q- j# u1 Z' P
# %t – 生成core文件的时间戳(seconds since 0:00h, 1 Jan 1970)
/ L6 }: |5 {: F2 s: w# %h – 主机名
. ?; ^8 f$ \9 W% l" n9 y' f3 n# %e – 程序文件名9 A% k$ R* g- P$ U5 Y
echo -e "/mydata/corefile/core-%e-%s-%u-%g-%p-%t" > /proc/sys/kernel/core_pattern* c+ [- L. w- L% I) U
5 ^) A" Q/ s' R5 \5 {0 X1 b( }
# for centos7 system(update 2017.2.3 21:44)% I' c$ C. X0 L5 g3 b; y( L- ?
echo -e "/mydata/corefile/core-%e-%s-%u-%g-%p-%t" > /etc/sysctl.conf
) T" ?; Z9 K- C6 m1 h  o9 @0 B$ l; A% a
# suffix of the core file name
" n7 J7 Y7 K; o! ~! o% S1 {echo -e "1" > /proc/sys/kernel/core_uses_pid' ?/ X/ k* B# x) ~; R

0 G, W# ?1 N! U4 s+ d1 _, N6 |5 a3 S& i/ T
centos下+ l* o1 O7 e0 e: V' {7 R
生成方式
) d2 t9 }& F" p5 t5 l## 查看是否开启,0表示没有开启,>0表示生成最大的coredump的大小(单位kb),可使用参数unlimited取消core文件大小的的限制1 V6 a1 i# {% l5 Q4 G8 P
ulimit -c 9 I: z7 q: k( ?0 H* A5 o
ulimit -c unlimited  2 K: D0 P% c# s( j8 @9 O3 D1 o: }: g( n
ulimit -c 0, m; m/ R9 \( M  Y
ulimit -a
5 v2 Z+ l$ a5 p/ k转储文件命名规范: x2 o3 y8 P% V1 N! M
## 设置是否添加pid作为扩展,1:添加 0:不添加2 b, G# K+ J0 R# @' k
cat /proc/sys/kernel/core_uses_pid
, t' o' |: @! ]/ ^$ `## 设置文件产生时的命名
0 w5 n5 U3 }1 l. Ncat /proc/sys/kernel/core_pattern
) q% u+ L- C4 @) T; `##通常这样设置:: \3 \1 A- [& t5 x
/opt/tmp/core/core-%e-%s-%u-%g-%p-%t
) V/ ?5 x# v1 @! M5 o参数介绍4 ~2 k: I1 v4 `% \0 |5 U
%p : insert pid into filename                             # 添加pid
4 M- C+ p6 E4 k%u : insert current uid into filename                     # 添加当前uid, v+ c+ E! x- N+ m" j) d
%g : insert current gid into filename                     # 添加当前gid+ j9 q2 i: K* d
%s : insert signal that cased the coredump into the file  # 添加导致产生core的信号
" c+ V) r) y( I( @+ R! |$ E0 u9 y2 J%t : insert UNIX time that the coredump occurred into file# 添加core文件生成时的unix时间
8 m( m* A7 g% U  X6 W%h : insert hostname where the coredump happened into file# 添加主机名
1 \+ l0 x! r) m3 ]0 B%e : insert coredumping executablename into file          # 添加命令名" ?  }- I( L" h& n
产生core的测试
6 w& q: {# H! M: H6 Pkill -s SIGSEGV $$
- H" j0 R+ f6 `Linux上的信号
5 m8 {* P3 ]% d" }发生coredump一般都是在进程收到某个信号的时候,Linux上现在大概有60多个信号,可以使用kill -l命令全部列出来。
% R  \/ |7 b. ^6 \9 m$ g( @% u+ A% K$ {! j; ]& P- ?
针对特定的信号,应用程序可以写对应的信号处理函数。如果不指定,则采取默认的处理方式,默认处理是coredump的信号如下:/ m# G; _! F) y& ?+ Z; j- ?) v

; y: e+ M) U8 O3 b9 p- t3 c3) SIGQUIT 4) SIGILL 6) SIGABRT 8) SIGFPE 11) SIGSEGV! ?; M# m9 H1 K$ S0 ]( G% y
7) SIGBUS 31) SIGSYS 5) SIGTRAP 24) SIGXCPU 25) SIGXFSZ
# c) d/ J6 n; h7 b. t8 X29) SIGIOT8 b  c: s+ n8 ]# I
core的使用
2 V8 A3 V* F9 j7 ?: O8 r+ C编译的程序如果不添加-g,在core中不会有行的信息,如果希望产生更详细的core文件,编译程序时需要指定-g。9 a; U8 U% Q9 d4 A! P5 u6 M" q

  ~# |8 K2 {* b& R; {/ ?gdb execute corefile7 O' J. P/ J  O# P3 E
gdb 基本使用命令1 S* t% i" d4 x- k
# 设置断点6 k, d# Y/ [) E8 m# H6 |8 |; o
b 行号|函数名4 n& ]( o6 K) }% ]7 r& {0 _0 q
# 删除断点
! p1 i* I' ]7 r9 }delete 断点编号$ G, r# a7 n' M, ?0 Y
# 禁用断点
  f5 ^5 Z1 e6 zdisable 断点编号
" l  k& |5 _5 |" J* H* t# 弃用断点+ P: w9 z& w# T, M
enable 断点编号
. [% w6 N9 Z3 n# 单步跟踪# n) I$ ^( A5 b4 z
next
# ^) N/ q; y# c& m: K3 O# 单步跟踪* ^/ E6 i+ B% {0 i& V
step9 |0 F: G7 @$ N# V2 g
# 打印变量- p3 b% B& x3 U# p! P
print 变量名
: h- _9 S: |. N% F# 设置变量% o& K  U: R* j% t
set var=value
$ ?1 \. U1 s' K7 e$ ^2 P) R7 ?8 ~# 查看变量类型
' O2 {0 S! ?  l0 Q2 k/ ^6 [ptype var* [' z# c3 Q: ]: J% ?6 |* ~. S! S1 m
# 顺序执行到结束
7 E& K* b8 ^0 q6 N" K2 o( Hcount
7 I" d! Q. b2 x/ Y! {7 O/ k# 顺序执行直到某一行
) `. c+ g! J6 vutil lineno/ k* r/ L2 s& E  y8 K
# 打印堆栈信息$ |  z+ }( e9 s; Q5 _' ^
bt7 P  y3 ?! C" K2 ]# F. h
3 H$ V$ j& N5 \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 03:20 , Processed in 0.017939 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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