Linux内核源码 Documentation/sysctl/kernel.txt core_pattern:

core_pattern:

core_pattern is used to specify a core dumpfile pattern name.
. max length characters; default value is "core"
. core_pattern is used as a pattern template for the output filename;
certain string patterns (beginning with '%') are substituted with
their actual values.
. backward compatibility with core_uses_pid:
If core_pattern does not include "%p" (default does not)
and core_uses_pid is set, then .PID will be appended to
the filename.
. corename format specifiers:
%<NUL> '%' is dropped
%% output one '%'
%p pid
%P global pid (init PID namespace)
%i tid
%I global tid (init PID namespace)
%u uid
%g gid
%d dump mode, matches PR_SET_DUMPABLE and
/proc/sys/fs/suid_dumpable
%s signal number
%t UNIX time of dump
%h hostname
%e executable filename (may be shortened)
%E executable path
%<OTHER> both are dropped
. If the first character of the pattern is a '|', the kernel will treat
the rest of the pattern as a command to run. The core dump will be
written to the standard input of that program instead of to a file.

步骤

1)编写coredump.sh脚本,放到/usr/local/目录

#!bin/bash

#/proc/<pid>/maps
cat /proc/$/maps > /tmp/maps_of_$ #coredump
dd > /tmp/core_$1_$2_$

2)执行以下命令配置coredump

ulimit -c unlimited

echo "|/usr/local/coredump.sh %p %e %s" > /proc/sys/kernel/core_pattern

完成配置,这样发生应用程序异常之后,如果触发coredump,就会抓取/proc/<pid>/maps文件并转储coredump文件。

测试

1)触发coredump

root@chgao-virtual-machine:/media/new/linyao/debugging/SIGFPE# ./test
Floating point exception

2)进入/tmp查看是否抓取到coredump和maps文件

root@chgao-virtual-machine:/tmp# ls
core_8124_test_8 maps_of_8124
root@chgao-virtual-machine:/tmp# file core_8124_test_8
core_8124_test_8: ELF -bit LSB core file x86-, version (SYSV), SVR4-style, from './test'
root@chgao-virtual-machine:/tmp# file maps_of_8124
maps_of_8124: ASCII text

3)查看maps文件

root@chgao-virtual-machine:/tmp# cat maps_of_8124
- r-xp fc: /media/new/linyao/debugging/SIGFPE/test
- r--p fc: /media/new/linyao/debugging/SIGFPE/test
- rw-p fc: /media/new/linyao/debugging/SIGFPE/test
7fad5d07a000-7fad5d23a000 r-xp : /lib/x86_64-linux-gnu/libc-2.23.so
7fad5d23a000-7fad5d43a000 ---p 001c0000 : /lib/x86_64-linux-gnu/libc-2.23.so
7fad5d43a000-7fad5d43e000 r--p 001c0000 : /lib/x86_64-linux-gnu/libc-2.23.so
7fad5d43e000-7fad5d440000 rw-p 001c4000 : /lib/x86_64-linux-gnu/libc-2.23.so
7fad5d440000-7fad5d444000 rw-p :
7fad5d444000-7fad5d46a000 r-xp : /lib/x86_64-linux-gnu/ld-2.23.so
7fad5d64b000-7fad5d64e000 rw-p :
7fad5d669000-7fad5d66a000 r--p : /lib/x86_64-linux-gnu/ld-2.23.so
7fad5d66a000-7fad5d66b000 rw-p : /lib/x86_64-linux-gnu/ld-2.23.so
7fad5d66b000-7fad5d66c000 rw-p :
7ffc833d2000-7ffc833f3000 rw-p : [stack]
7ffc833f5000-7ffc833f8000 r--p : [vvar]
7ffc833f8000-7ffc833fa000 r-xp : [vdso]
ffffffffff600000-ffffffffff601000 r-xp : [vsyscall]

4)使用gdb调试coredump文件

root@chgao-virtual-machine:/media/new/linyao/debugging/SIGFPE# gdb ./test /tmp/core_8124_test_8
GNU gdb (Ubuntu 7.11.-0ubuntu1~16.5) 7.11.
Copyright (C) Free Software Foundation, Inc.
License GPLv3+: GNU GPL version or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./test...done.
[New LWP ] warning: the debug information found in "/lib64/ld-2.23.so" does not match "/lib64/ld-linux-x86-64.so.2" (CRC mismatch). Core was generated by `./test'.
Program terminated with signal SIGFPE, Arithmetic exception.
# 0x00000000004004f3 in main (argc=, argv=0x7ffc833f1658) at test.c:
result = a /
b;
(gdb) info registers
rax 0x2
rbx 0x0
rcx 0x0
rdx 0x0
rsi 0x7ffc833f1658
rdi 0x1
rbp 0x7ffc833f1570 0x7ffc833f1570
rsp 0x7ffc833f1570 0x7ffc833f1570
r8 0x400570
r9 0x7fad5d454ab0
r10 0x846
r11 0x7fad5d09a740
r12 0x4003e0
r13 0x7ffc833f1650
r14 0x0
r15 0x0
rip 0x4004f3 0x4004f3 <main+>
eflags 0x10246 [ PF ZF IF RF ]
cs 0x33
ss 0x2b
ds 0x0
es 0x0
fs 0x0
gs 0x0
(gdb) bt

# 0x00000000004004f3 in main (argc=, argv=0x7ffc833f1658) at test.c:

Linux高级调试与优化——同时抓取coredump和maps文件的更多相关文章

  1. Linux高级调试与优化——gdb调试命令

    番外 2019年7月26日至27日,公司邀请<软件调试>和<格蠹汇编——软件调试案例集锦>两本书的作者张银奎老师进行<Linux高级调试与优化>培训,有幸聆听张老师 ...

  2. Linux高级调试与优化——内存管理

    1.物理地址和虚拟地址 Linux采用页表机制管理内存,32位系统中页大小一般为4KB,物理内存被划分为连续的页,每一个页都有一个唯一的页号. 为了程序的的可移植性,进程往往需要运行在flat mem ...

  3. Linux高级调试与优化——信号量机制与应用程序崩溃

    背景介绍 Linux分为内核态和用户态,用户态通过系统调用(syscall)进入内核态执行. 用户空间的glibc库将Linux内核系统调用封装成GNU C Library库文件(兼容ANSI &am ...

  4. Linux高级调试与优化——内存泄漏实战分析

    最近在整理Linux调试方面的文档,正好碰到了一个内存泄漏踩栈的问题,借此机会记录一下分析过程. 首先,发现问题之后,赶紧看一下产生coredump文件没有,果不其然,产生了coredump,果断上g ...

  5. Linux高级调试与优化——ptrace

    ptrace (process trace) #include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_ ...

  6. Linux高级调试与优化——用户态堆

    内存问题是软件世界的住房问题 嵌入式Linux系统中,物理内存资源通常比较紧张,而不同的进程可能不停地分配和释放不同大小的内存,因此需要一套高效的内存管理机制. 内存管理可以分为三个层次,自底向上分别 ...

  7. Linux高级调试与优化——Address Sanitizer

    Address Sanitizer ASAN最早可以追溯到 LLVM 的 sanitizers项目(https://github.com/google/sanitizers),这个项目包含了Addre ...

  8. Linux高级调试与优化——进程管理和调度

    进程管理 进程和文件是Linux操作系统的两个最基本的抽象. 进程是处于执行期的程序,进程不仅仅局限于一段可执行程序代码,通常还包含其他资源,如打开的文件.挂起的信号.内核内部数据.处理器状态.进程地 ...

  9. "用wow64exts调试64位任务管理器抓取的32位程序的dump"

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:"用wow64exts调试64位任务管理器抓取的32位程序的dump".

随机推荐

  1. 03 Redis发布与订阅

    以qq群的公告,单个发布者,多个收听者为例 发布/订阅 实验 发布订阅的命令 PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE ch ...

  2. ArcGis之popup列表字段自定义

    ArcGis之popup列表字段自定义 featureLayer图层中可以使用popupTemplate属性添加弹窗. API:https://developers.arcgis.com/javasc ...

  3. vue实现登录路由拦截

    第一步 在router.js里面 把需要判断是否登录的路由添加meta对象属性 在meta对象里面自定义一个属性值 第二步 : 在router.js里面 与const router = new Rou ...

  4. 个人总结的J2EE目前知道的涵盖面,从大方向入手,多写单元测试,加强基础

    JEE Development process: java SE 普通语法,,异常处理,数据结构,循环,面向对象,泛型, 属性,反射,多线程,线程池,锁, lambada,异步编程,并发 框架spri ...

  5. 第10课:[实战] Redis 网络通信模块源码分析(3)

    redis-server 接收到客户端的第一条命令 redis-cli 给 redis-server 发送的第一条数据是 *1\r\n\$7\r\nCOMMAND\r\n .我们来看下对于这条数据如何 ...

  6. 我说CMMI之三:CMMI的构件--转载

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/dylanren/article/deta ...

  7. SAP的春天回来么?

    作为一个财务出身的码农,经常会关注在财务和编程的交叉领域,新兴的细分领域有:德勤的财务机器人,RPA机器人,FINTECH等等. 但是非要说一个便是sap.如果呈把用友成立之年算作sap元年,1988 ...

  8. 阅读之MySQL数据库分表

    移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方面的优化显得不太重要,一旦数据量越来越大,系统响应会变慢,TPS直线下降,直至 ...

  9. Linux——awk

    https://blog.csdn.net/jin970505/article/details/79056457 可以根据特定规则输出文本文件内容

  10. set -ex

    #!/bin/bash set -x echo "Hello World !" 执行效果为 + echo Hello World !Hello World ! - 其实效果和sh ...