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 128 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/$1/maps > /tmp/maps_of_$1

#coredump
dd > /tmp/core_$1_$2_$3

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

[email protected]virtual-machine:/media/new/linyao/debugging/SIGFPE# ./test
Floating point exception

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

[email protected]virtual-machine:/tmp# ls
core_8124_test_8  maps_of_8124
[email protected]-virtual-machine:/tmp# file core_8124_test_8
core_8124_test_8: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from ‘./test‘
[email protected]-virtual-machine:/tmp# file maps_of_8124
maps_of_8124: ASCII text

3)查看maps文件

[email protected]virtual-machine:/tmp# cat maps_of_8124
00400000-00401000 r-xp 00000000 fc:00 57147397                           /media/new/linyao/debugging/SIGFPE/test
00600000-00601000 r--p 00000000 fc:00 57147397                           /media/new/linyao/debugging/SIGFPE/test
00601000-00602000 rw-p 00001000 fc:00 57147397                           /media/new/linyao/debugging/SIGFPE/test
7fad5d07a000-7fad5d23a000 r-xp 00000000 08:01 268253                     /lib/x86_64-linux-gnu/libc-2.23.so
7fad5d23a000-7fad5d43a000 ---p 001c0000 08:01 268253                     /lib/x86_64-linux-gnu/libc-2.23.so
7fad5d43a000-7fad5d43e000 r--p 001c0000 08:01 268253                     /lib/x86_64-linux-gnu/libc-2.23.so
7fad5d43e000-7fad5d440000 rw-p 001c4000 08:01 268253                     /lib/x86_64-linux-gnu/libc-2.23.so
7fad5d440000-7fad5d444000 rw-p 00000000 00:00 0
7fad5d444000-7fad5d46a000 r-xp 00000000 08:01 268251                     /lib/x86_64-linux-gnu/ld-2.23.so
7fad5d64b000-7fad5d64e000 rw-p 00000000 00:00 0
7fad5d669000-7fad5d66a000 r--p 00025000 08:01 268251                     /lib/x86_64-linux-gnu/ld-2.23.so
7fad5d66a000-7fad5d66b000 rw-p 00026000 08:01 268251                     /lib/x86_64-linux-gnu/ld-2.23.so
7fad5d66b000-7fad5d66c000 rw-p 00000000 00:00 0
7ffc833d2000-7ffc833f3000 rw-p 00000000 00:00 0                          [stack]
7ffc833f5000-7ffc833f8000 r--p 00000000 00:00 0                          [vvar]
7ffc833f8000-7ffc833fa000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

4)使用gdb调试coredump文件

[email protected]virtual-machine:/media/new/linyao/debugging/SIGFPE# gdb ./test /tmp/core_8124_test_8
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 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 8124]

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.
#0  0x00000000004004f3 in main (argc=1, argv=0x7ffc833f1658) at test.c:12
12      result = a / b;
(gdb) info registers
rax            0x2    2
rbx            0x0    0
rcx            0x0    0
rdx            0x0    0
rsi            0x7ffc833f1658    140722510435928
rdi            0x1    1
rbp            0x7ffc833f1570    0x7ffc833f1570
rsp            0x7ffc833f1570    0x7ffc833f1570
r8             0x400570    4195696
r9             0x7fad5d454ab0    140382570891952
r10            0x846    2118
r11            0x7fad5d09a740    140382566983488
r12            0x4003e0    4195296
r13            0x7ffc833f1650    140722510435920
r14            0x0    0
r15            0x0    0
rip            0x4004f3    0x4004f3 <main+29>
eflags         0x10246    [ PF ZF IF RF ]
cs             0x33    51
ss             0x2b    43
ds             0x0    0
es             0x0    0
fs             0x0    0
gs             0x0    0
(gdb) bt
#0  0x00000000004004f3 in main (argc=1, argv=0x7ffc833f1658) at test.c:12

原文地址:https://www.cnblogs.com/justin-y-lin/p/11327224.html

时间: 2024-11-08 04:29:19

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

Python抓取网页&amp;批量下载文件方法初探(正则表达式+BeautifulSoup) (转)

Python抓取网页&批量下载文件方法初探(正则表达式+BeautifulSoup) 最近两周都在学习Python抓取网页方法,任务是批量下载网站上的文件.对于一个刚刚入门python的人来说,在很多细节上都有需要注意的地方,以下就分享一下我在初学python过程中遇到的问题及解决方法. 一.用Python抓取网页 基本方法: [python] view plaincopyprint? import urllib2,urllib url = 'http://www.baidu.com' req 

PHP利用Curl实现多线程抓取网页和下载文件

PHP 利用 Curl  可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,一般采集 数据可以利用 PHPquery类来采集数据库,在此之外也可以用 Curl ,借助Curl 这个功能实现并发多线程的访问多个url地址以实现并发多线程抓取网页或者下载文件. 至于具体实现过程,请参考下面几个例子: 1.实现抓取多个URL并将内容写入指定的文件 $urls = array( '路径地址', '路径地址', '路径地址

Hibernate 性能优化之抓取策略

fetch 抓取策略 前提条件:必须是一个对象操作其关联对象. 1. 根据一的一方加载多的一方,在一的一方集合中,有三个值:join/select/subselect 2.根据多的一方加载一的一方, 这种情况不考虑,因为关联对象就一个数据,怎么样都可以join 连接  [一次性的把两张表的数据全部查询出来,只发出一条sql语句]    *  在页面上既包括一的一方的数据,又包括多的一方的数据    *  数据库的数据量比较小select 默认的查询方式    [先加载classes,当得到stu

使用flume抓取tomcat的日志文件下沉到kafka消费

Tomcat生产日志 Flume抓取日志下沉到kafka中 将写好的web项目打包成war包,eclise直接导出export,IDEA 在artifact中添加新的artifact-achieve项,选择web项目所在目录,再build即可 在Linux的Tomcat  Webapp目录下放入war包,在bin下启动Tomcat时,war包会自动解压,然后从浏览器访问,注意是http://bigdata2:8080/WebAnalysis_war/ 的形式 host:8080/+项目文件名 配

shell命令curl抓取网页内容-下载xls文件

通过curl命令抓取网页内容,关键点如下: 1.curl要模拟浏览器,最好是有个代理,因为很多站点都会搞个反爬虫什么的. 2.我的需求很简单,就是在国家外汇管理局上下载各种货币对美元的汇率. http://www.safe.gov.cn/wps/portal/sy/tjsj_dmzsl 3.主要命令:curl,grep,awk,xls2txt,msql(LOAD DATA ). curl:提取url xls2txt:shell下的xls操作命令 xls2txt-0.14.tar.gz 下载地址:

抓取网页数据C#文件

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Collections.Generic;using System.Text.RegularExpressions;using System.Text; using System.Net; using System.IO; namespace WebJSON.Contro

php爬虫抓取信息及反爬虫相关

58爬虫了百姓,赶集和58互爬,最后各种信息相同,都是爬虫后的数据库调用,潜规则啊,几家独大还暗中各种攻击,赶驴网的幽默事例我不想多评价.这个时代是砸.钱*养.钱的时代,各种姚晨杨幂葛优,各种地铁公车广告,各种卫视广告,铺天盖地~~~ 来谈php爬虫抓取信息~~ php爬虫首推Curl函数了,先来认识下它. 0x01.curl扩展的安装: 1.确保php子文件夹ext里面有php_curl.dll(一般都有的,一般配置时候会设置环境变量的) 2.将php.ini里面的;extension=php

hibernate抓取策略学习

一.hibernate抓取策略概述 Hibernate抓取策略(fetching strategy)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候, Hibernate如何获取关联对象的策略.抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL 或条件查询(Criteria Query)中重载声明. 需要注意的是:hibernate的抓取策略只影响get load 方法,对hql是不影响的. 二.hibernate 抓取策略分类 hibernate有如下

数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置

数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby 数据抓取是一门艺术,和其他软件不同,世界上不存在完美的.一致的.通用的抓取工具.为了不同的目的,需要定制不同的代码.不过,我们不必Start from Scratch,已经有许多的基本工具.基本方法和基础框架可供使用.不同的工具.不同的方法.不同的框架的特点也不同.了解这些工具.方法和框架是首要任务,接下来就需要明白它们的差异都在哪里.什么情境该用什