排查顺序
1、各个组件版本是否匹配。
2、各个组件是否都已经重新加载了最新库/完成重启。(特别当系统进程很多时,确保所以组件都是最新状态)。
3、代码逻辑bug。
错误记录
1、No source file named. or 没有在断点的地方停止
No source file named. Make breakpoint pending on future shared library load
(gdb) b mps_guide_db.c:1699
No source file named mps_guide_db.c.
1)可能是因为调用了动态库,要打断点的文件是动态库的
可以通过 以下方式得到解决:
(gdb) set breakpoint pending on
(gdb) b db_subscr_no_lookup
Function "db_subscr_no_lookup" not defined.
Breakpoint 1 (db_subscr_no_lookup) pending.
原文链接:https://blog.csdn.net/huluedeai/article/details/52225923
2)可能是 程序和库 编译的时候没有加-g 或者程序和库经过strip 命令已经将其中的调试信息去掉了
如:
(gdb) b RDMAConnectedSocketImpl.cc:159
No source file named RDMAConnectedSocketImpl.cc.
Make breakpoint pending on future shared library load? (y or [n])
gdb调试时的问题Missing separate debuginfos, use: debuginfo-install glibc-XXX
cd
/etc/yum.repos.d
vim CentOS-Debuginfo.repo
enable = 1
yum install glibc
debuginfo-install glibc.x86_64 0:2.17-307.el7.1
没有core dump文件和日志如何定位segment/core dump问题?
dmesg + addr2line
dmesg
打印环形缓冲区的内容。这些信息还会实时发送到syslogd
或klogd
(在它们运行时),最终以形式发送给/var/log/messages
;什么时候dmesg
最有用是捕获之前syslogd
和/或klogd
开始的启动时消息,以便将它们正确记录。dmesg:dmesg是(显示或驱动程序)消息。它用于检查或控制内核环形缓冲区。
messages:它包含全局系统消息,包括系统启动期间记录的消息。有几项已登录,
/var/log/messages
包括mail,cron,daemon,kern,auth等。
步骤:
以后, 在没有core时, 可以优先看:
1. /var/log/messages
2. dmesg dmesg /var/log/messages
dmesg -Tw 显示时间
dmesg |less or dmesg |more 分页查看。 (more 只能向后翻页)
3. /var/log/dmesg
4.journalctl -xe 命令(系统日志查询)
journalctl -k 和 "journalctl --dmesg 只显示系统的内核日志信息。
-f, --follow
只显示最新的日志项,并且不断显示新生成的日志项。 此选项隐含了 -n 选项。