当程序崩溃的时候,会产生一个core文件。我们可以称它为进程死亡现场。排查进程死亡就和破案一样,找到案发现场,仔细排查每个细节,抽丝剥茧,最终定位原因。
很幸运我们有一个强大的工具调查现场信息。这个工具就是GDB。
下面我们就来看看如何用GDB排查问题。
首先以一个越界访问数组的程序为例,如下:
#include #include void core() { std::vector<int> a; std::cout << a[0]; } int main() { core(); return 0; }
执行上面的代码将会产生一个core文件。
假设我们的core文件为core.13160(13160是出core的进程号),我们的程序是a.out,那么加载core文件的命令为
gdb -c core.13610 ./a.out
执行bt命令就可以查看调用栈,如下:
(gdb) bt #0 0x00000000004007ec in core () at core.cpp:6 #1 0x0000000000400839 in main () at core.cpp:10
通过调用栈的我们能找到出现问题的代码在哪个函数,哪一行。上面的bt信息显示,我们出现问题的在core()函数,第6行。
简单场景,使用bt就能大致定位问题。然而生产环境中的core往往不是那么简单。这个时候就需要更多的操作去挖掘当时出core的场景。
你可能还喜欢下面这些文章
最近在写hadoop的streaming任务,在输出的时候用了std::endl,就像下面这样:os << “content” << std::endl运行后发现程序跑的比python还慢,令人费解。我入门C++的时候,输出hello world也是这样写的,有什么问题?于是查了一下std::endl,发现问题挺大。std::endl解释如下:Inserts a new-line character and flushes the stream.Its behavior is equivalent to calling os.put(‘\n’) (or os.put(o
这是我学习C++的第三篇笔记,函数。我的学习路径是1. 变量和数据类型2. 流程控制3. 函数4. 面向对象5. 标准库现在学习的是函数的声明、定义、调用等相关知识。函数声明和定义函数的声明包含返回类型,函数名字,0个或者多个形参,无函数体,通常在头文件中对函数进行声明。返回类型 函数名称(参数类型1 参数1, 参数类型2 参数2);// 例如声明一个求阶乘的函数int fact(int val);函数的定义包含返回类型,函数名字,0个或多个形参,以及函数体。返回类型 函数名称(参数类型1 参数1, 参数类型2 参数2) { 函数体}比如写一个求阶乘的函数,可以写成下面这样int fac
机器搬家之后,之前一直稳定的PHP多进程程序子进程突然异常退出,但是退出的不是很频繁,查看进程日志并也没有发现有什么导致退出的,问题比较诡异。于是开启了一段问题排查之路。首先查看内核日志,使用dmesg,拉到最后发现有一些这样的错误,看来确实是崩溃了。[4791991.998535] php[16776]: segfault at 7f6443ee18c8 ip 00007f6443ee18c8 sp 00007fff4d4ba818 error 15 in libc-2.17.so[7f6443ee1000+2000][4792165.192628] php[609]: segfault a
shell中的if语法是最让我头疼的语法之一,它的判断就向使用USB插头一样——拿起来插入不行,翻转再插入还不行,再翻转插入行了!为了搞清楚这部分语言,我收集了一些文章关于if条件判断的用法,希望对你也有些帮助。一、基本语法if [ command ]; then 符合该条件执行的语句fiif [ command ];then 符合该条件执行的语句elif [ command ];then 符合该条件执行的语句else 符合该条件执行的语句fi语法说明bash shell会按顺序执行if语句,如果command执行后且它的返回状态是0,则会执行符合该条件执行的语
前言最近编译C++代码时出现链接失败信息,类似下图:图一初见这个错误有些令人费解,不过经过一番分析,发现原因还是清晰的,和大家一起分享一下。图一中使用的tpl.h代码如下:#pragma oncetemplate <typename T>int compare(const T& a, const T& b);tpl.cpp代码如下:#include “tpl.h”#include <iostream>template <typename T>int compare(const T& a, const T& b) { if
赞赏微信赞赏
支付宝赞赏