查阅Ubuntu系统文件,针对Segfault段错误排查

软件运行过程中出现偶发崩溃等问题,可以查看Linux系统日志文件进行排查。

目录

  • 1./var/log/ 各个日志文件分析
  • 2.Linux syslog日志系统详解
  • 3.段错误排查过程

1./var/log/ 各个日志文件分析

查阅Ubuntu系统文件,针对Segfault段错误排查_第1张图片

  • /var/log/messages
    包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。

  • /var/log/dmesg
    包含内核缓冲信息(kernel ring buffer),在系统启动时,会在屏幕上显示许多与硬件有关的信息,可以用dmesg查看它们。
    Linux dmesg 命令用于显示开机信息。
    kernel 会将开机信息存储在 ring buffer 中。您若是开机时来不及查看信息,可利用 dmesg 来查看。

dmesg [-cn][-s <缓冲区大小>]
参数说明:
-c  显示信息后,清除 ring buffer 中的内容
-s   缓冲区大小> 预设置为 8196,刚好等于 ring buffer 的大小。
-n  设置记录信息的层级

https://www.cnblogs.com/duanxz/p/3477095.html

  • /var/log/audit/
    包含被 Linux audit daemon储存的信息。例如:selinux开启的时候,这里就会有关于selinux审计的日志。

  • /var/log/boot.log
    包含系统启动时的日志,包括自启动的服务。

  • /var/log/daemon.log
    包含各种系统后台守护进程日志信息。

  • /var/log/dpkg.log
    包括安装或dpkg命令清除软件包的日志。

  • /var/log/kern.log
    包含内核产生的日志,有助于在定制内核时解决问题。

  • /var/log/lastlog
    记录所有用户的最近信息,这不是一个ASCII文件,因此需要用lastlog命令查看内容。

  • /var/log/maillog 或 /var/log/mail.log
    包含来自系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。

  • /var/log/user.log
    记录所有等级用户信息的日志。

  • /var/log/Xorg.x.log
    来自Xorg的日志信息。
    Xorg是linux的GUI图形化进程,xorg是X11的一个实现,而X Window System是一个C/S结构的程序,Xorg只是提供了一个X Server,负责底层的操作当你运行一个程序的时候,这个程序会连接到X server上,由X server接收键盘鼠标输入和负责屏幕输出窗口的移动,窗口标题的样式等等。

  • /var/log/alternatives.log
    更新替代信息都记录在这个文件中。

  • /var/log/btmp
    记录所有失败登录信息。使用last命令可以查看btmp文件,例如,”last -f /var/log/btmp | more“。

  • /var/log/cups
    涉及所有打印信息的日志,即cups打印服务运行的日志。

  • /var/log/anaconda.log 或 /var/log/anconda/
    在安装Linux时,所有安装信息都储存在这个文件中,包含在安装CentOS/RHEL时候的日志。

  • /var/log/yum.log
    包含使用yum安装的软件包信息。

  • /var/log/cron
    每当cron进程开始一个工作时,就会将相关信息记录在这个文件中。

  • /var/log/secure
    包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。

  • /var/log/wtmp或/var/log/utmp
    包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。

  • /var/log/faillog
    包含用户登录失败信息,此外,错误登录命令也会记录在本文件中。

  • /var/log还基于系统的具体应用包含以下一些子目录
    查阅Ubuntu系统文件,针对Segfault段错误排查_第2张图片

2.Linux syslog日志系统详解

https://www.cnblogs.com/duanxz/p/3578194.html
  syslog是一种工业标准的协议,可用来记录设备的日志。在UNIX系统,路由器、交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录,随时掌握系统状况。UNIX的系统日志是通过syslogd这个进程记录系统有关事件记录,也可以记录应用程序运作事件。通过适当的配置,我们还可以实现运行syslog协议的机器间通信,通过分析这些网络行为日志,藉以追踪掌握与设备和网络有关的状况。

在这里插入代码片

3.段错误排查过程

  • 1.查看系统日志 /var/log/syslog,发现几处段错误
Mar 21 11:03:58 aubo-384519007 kernel: [ 5717.241498] aubo_scope[3840]: segfault at 0 ip 00007f799a0b2c8c sp 00007f798a849210 error 4 in libQt5Core.so.5.12.9[7f7999ea6000+589000]

Mar 21 14:15:10 aubo-384519007 kernel: [17188.399634] aubo_scope[7145]: segfault at 0 ip 00007f38e2805c8c sp 00007f38d2f9c210 error 4 in libQt5Core.so.5.12.9[7f38e25f9000+589000]

这里以第一处段错误为例,

Mar 21 11:03:58 aubo-384519007 kernel: [ 5717.241498] aubo_scope[3840]: segfault at 0 ip 00007f799a0b2c8c sp 00007f798a849210 error 4 in libQt5Core.so.5.12.9[7f7999ea6000+589000]

其中,
00007f799a0b2c8c 表示函数发生错误时指令的地址,但这个值在有些错误时是错误的;
00007f798a849210 表示堆栈指针;
7f7999ea6000 表示libQt5Core指令的基地址;
偏移地址 = 指令地址 - 基地址

libQt5Core指令的基地址为:7f7999ea6000
函数指令地址为:00007f799a0b2c8c
00007f799a0b2c8c - 7f7999ea6000 = 20CC8C
  • 2.通过偏移地址查找所在的函数
    首先查找 libQt5Core.so.5.12.9
sudo find / -name "libQt5Core.so.5.12.9"
objdump -tT libQt5Core.so.5.12.9 | grep 20

参考:
1.在linux下调试段错误(核心已转储) Segmentation fault (core dumped)
https://zhuanlan.zhihu.com/p/361711167
2.一次segfault错误的排查过程
https://blog.csdn.net/zhaohaijie600/article/details/45246569
3.Linux segfault错误排查
https://blog.csdn.net/xiejianjun417/article/details/115624163
4.objdump(Linux)反汇编命令使用指南
https://blog.csdn.net/wwchao2012/article/details/79980514

你可能感兴趣的:(Linux,Xubuntu,ubuntu,linux,segmentfault)