Linux高级调试与优化——同时抓取coredump和maps文件
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文件的更多相关文章
- Linux高级调试与优化——gdb调试命令
番外 2019年7月26日至27日,公司邀请<软件调试>和<格蠹汇编——软件调试案例集锦>两本书的作者张银奎老师进行<Linux高级调试与优化>培训,有幸聆听张老师 ...
- Linux高级调试与优化——内存管理
1.物理地址和虚拟地址 Linux采用页表机制管理内存,32位系统中页大小一般为4KB,物理内存被划分为连续的页,每一个页都有一个唯一的页号. 为了程序的的可移植性,进程往往需要运行在flat mem ...
- Linux高级调试与优化——信号量机制与应用程序崩溃
背景介绍 Linux分为内核态和用户态,用户态通过系统调用(syscall)进入内核态执行. 用户空间的glibc库将Linux内核系统调用封装成GNU C Library库文件(兼容ANSI &am ...
- Linux高级调试与优化——内存泄漏实战分析
最近在整理Linux调试方面的文档,正好碰到了一个内存泄漏踩栈的问题,借此机会记录一下分析过程. 首先,发现问题之后,赶紧看一下产生coredump文件没有,果不其然,产生了coredump,果断上g ...
- Linux高级调试与优化——ptrace
ptrace (process trace) #include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_ ...
- Linux高级调试与优化——用户态堆
内存问题是软件世界的住房问题 嵌入式Linux系统中,物理内存资源通常比较紧张,而不同的进程可能不停地分配和释放不同大小的内存,因此需要一套高效的内存管理机制. 内存管理可以分为三个层次,自底向上分别 ...
- Linux高级调试与优化——Address Sanitizer
Address Sanitizer ASAN最早可以追溯到 LLVM 的 sanitizers项目(https://github.com/google/sanitizers),这个项目包含了Addre ...
- Linux高级调试与优化——进程管理和调度
进程管理 进程和文件是Linux操作系统的两个最基本的抽象. 进程是处于执行期的程序,进程不仅仅局限于一段可执行程序代码,通常还包含其他资源,如打开的文件.挂起的信号.内核内部数据.处理器状态.进程地 ...
- "用wow64exts调试64位任务管理器抓取的32位程序的dump"
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:"用wow64exts调试64位任务管理器抓取的32位程序的dump".
随机推荐
- 启动web项目报错:The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone.
解决: 在application.properties配置文件中的添加标红部分 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/miaosha?se ...
- 前端点击下载excel表格数据
<el-button type="primary" @click="downloadChartData" size="mini"> ...
- jQuery 遍历 - 祖先
通过 jQuery,您能够向上遍历 DOM 树,以查找元素的祖先. 向上遍历 DOM 树 这些 jQuery 方法很有用,它们用于向上遍历 DOM 树: parent() parents() pare ...
- 87. Scramble String (Java)
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- MySQL之RPM安装说明及配置
1.查看当前系统是否安装过Linux rpm -qa | grep -i mysql 未安装无任何输出:安装会打印对应mysql的rpm安装包. 2.准备安装包: MySQL-client-5.5.4 ...
- 2019-2020-1 20199319《Linux内核原理与分析》第六周作业
系统调用的三层机制(下) 给MenuOS增加命令 首先进入LinuxKernel文件夹,删除menu目录,然后git clone克隆一个新版本的menu,新版本的menu中已经添加了time和time ...
- cmd命令行显示中文乱码
cmd命令行显示中文乱码多数是由于字符编码不匹配导致. 1.查看cmd编码方式 方法一.打开cmd,输入chcp命令回车(显示默认编码:活动代码页:936指GBK) 方法二.打开cmd在标题栏单击鼠标 ...
- sudo 不用输入密码
3. 设置当前登陆用户免密 使用visudo打开sudoers并编辑 sudo visudo 在刚才编辑的内容中加上NOPASSWD: linuxidc ALL=(ALL:ALL) NOPASSWD: ...
- Java的面向对象属性
定义类 定义类的过程就是定义类的属性的过程: 类的属性就是累的静态属性的简称,指类内包含的各项数据. 类的服务被称为成员函数或方法. 继承extends 通过定义继承方法,子类可以获得父类的所有属性和 ...
- java——解决"java.io.StreamCorruptedException: invalid stream header: xxx"
这个错误是由序列化引起的,可能的原因以及解决方法: 1.kryo对于集合(比如 Map)的反序列化会失效,报这个错误,解决办法比较暴力,不用kryo了,直接用java原生方法. 2.使用Java原生方 ...