zoukankan      html  css  js  c++  java
  • Core Dump和/proc调试 Orisun 博客园

    Core Dump和/proc调试 - Orisun - 博客园

    Core Dump和/proc调试

    Core Dump

    通过Core Dump是事后调试(postmortem debug)。

    首先把Core文件的大小设置为1024

    orisun@zcypc:~$ ulimit -c

    0

    orisun@zcypc:~$ ulimit -c 1024

    注意此修改仅在当前shell有效

    root@zcypc:/home/orisun# echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

    所有的core文件将会存放到/corefile中,文件名格式为:core-命令名-pid-时间戳
    我们写一个脚本来模拟Core Dump行为
    #script that dumps core
    kill -s SIGSRGV $
    保存为crash.sh
    #chmod +x crash.sh
    #./crash.sh
    Segmentation fault
    信号SIGSEGV是由内存访问越界、空指针等错误导致的段错误(segmentation fault)造成的。
     
    调试Core文件可以用gdb [exec file] [core file]
     
    /proc
    /proc是个虚拟文件系统,它只存在于内在当中。可以通过/proc得到系统信息,也可通过它修改系统参数。

    可以cat /proc/cpuinfo一下
    core dump调试中提到的echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern就是在修改/proc文件
     
    orisun@zcypc:~$ ps aux | grep init
    root         1  0.0  0.1   2808  1556 ?        Ss   08:27   0:00 /sbin/init
    orisun    2993  0.0  0.0   3552   820 pts/0    S+   10:10   0:00 grep init
     
    orisun@zcypc:~$ pstree
    init─┬─NetworkManager
         ├─acpid
         ├─apturl───apturl-gtk─┬─gksu───synaptic─┬─synaptic───dpkg───frontend───fla+
         │                     │                 └─{synaptic}
         │                     └─{apturl-gtk}
         ├─atd
         ├─avahi-daemon───avahi-daemon
         ├─bonobo-activati───{bonobo-activat}
         ├─chrome─┬─chrome
         │        ├─chrome───8*[{chrome}]
         │        └─27*[{chrome}]
         ├─chrome─┬─7*[chrome───{chrome}]
         │        └─chrome───4*[{chrome}]
     
    fuser查看正在访问某个或某些文件(或目录)的进程ID,比如查看哪些进程使用了动态共享库ld-2.11.1.so
    orisun@zcypc:~$ fuser -v /lib/ld-2.3.3.so
    Specified filename /lib/ld-2.3.3.so does not exist.
    orisun@zcypc:~$ fuser -v /lib/ld-2.11.1.so
                         用户     进程号 权限   命令
    /lib/ld-2.11.1.so:   orisun     1336 ....m gnome-keyring-d
                         orisun     1354 ....m gnome-session
                         orisun     1392 ....m dbus-launch
                         orisun     1393 ....m dbus-daemon
                         orisun     1395 ....m fcitx
                         orisun     1397 ....m gconfd-2
    lsof与fuser正好相反,它查看某个程序或进程打开了哪些文件。
    lsof -c init
     
    跟踪(Trace)工具
    backtrace查看栈信息
    strace用来跟踪和监视程序的每一个系统调用
    ltrace用来跟踪和监视程序的每一个C/C++库函数调用
    LTT(Linux Trace Toolkit)是一个内核补丁及一套相关工具,用来追踪内核的各种事件如进程的创建、挂起和调试,文件的读写,内存的管理等,并且提供数据分析工具,分析结果可以以图形化方式展示出来。
  • 相关阅读:
    多测师讲解html _伪类选择器17_高级讲师肖sir
    多测师讲解html _后代选择器16_高级讲师肖sir
    多测师讲解html _组合选择器_高级讲师肖sir
    多测师讲解html _标签选择器14_高级讲师肖sir
    前端 HTML form表单标签 input标签 type属性 重置按钮 reset
    前端 HTML form表单标签 textarea标签 多行文本
    前端 HTML form表单标签 input标签 type属性 file 上传文件
    前端 HTML form表单标签 input标签 type属性 radio 单选框
    前端 HTML form表单标签 input标签 type属性 checkbox 多选框
    前端 HTML form表单目录
  • 原文地址:https://www.cnblogs.com/lexus/p/2951966.html
Copyright © 2011-2022 走看看