RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
记一次core文件调试-创新互联

无论是linux系统,还是windows系统,我们都有可能因为各种原因导致程序崩溃,那么这种情况下如何确认崩溃在哪了呢?

成都创新互联公司是专业的忻城网站建设公司,忻城接单;提供做网站、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行忻城网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

windows系统

这里是采用windows的api来产生dump文件

产生minidump的方法,网上都有,可以搜一下。

#include "DumpManager.h"

void main()
{
    DumpManager dump_manager(true);
    char* p = NULL;
    memcpy(p, "Hello", strlen("Hello"));
}

注:这里的DumpManager.h是崩溃后生成dump的文件

崩溃后的样子,可能不同的人写出来的形式不一样,或者弹出小窗,或者直接打印,或者发送监控消息给客户端,看自己实现吧!这里我采用直接打印:
记一次core 文件调试

调试开始前的准备:
记一次core 文件调试
这里的优化一定要关掉,否则会导致dunp文件里面的调试信息和代码对不上。

记一次core 文件调试
如果程序有可能产生windows底层的异常,这里也一定要切换

记一次core 文件调试
因为dump文件要和pdb一起使用,所以这里一定要生成pdb文件,否则一切白搭。

开始调试:
程序崩溃后,程序运行目录下面会生成dump文件,这个文件名由自己生成dump的函数决定。
记一次core 文件调试
这个时候,只需要用VS直接打开dump文件,就会进入到VS的调试界面
记一次core 文件调试
对着画线的部分,右键然后进入调试状态,这里两个选项可以随便选:
记一次core 文件调试
注意:如果这里出现一些识别不了的dll函数,就需要将对应的dll以及pdb拷贝过来,如果dll是操作系统里面的,只需要从微软的服务器下载就可以了。
这里弹出的框里面会提示异常的信息,指针指向的地方就是崩溃的位置。然后就和本地的程序调试一样,看各个值就可以了,这里不再赘述了。

Linux系统
调试开始前要准备的工作:开启生成核心文件(一次执行只对一个终端窗口有效,所以一旦终端关闭,就需要重新执行)
命令如下:
ulimit -c unlimited 这里是不限制core文件的大小,也可以限制core文件的大小,这个自行搜索吧!

代码如下:

 #include 
#include 

void main()
{
   int i = 0;
   char* pTmp = NULL;
   printf("%d\n", *pTmp);
   return;
}

编译,执行:
记一次core 文件调试
这里据说编译的时候必须加上-g 选项,否则用gdb调试的时候就会定位不到源代码,只能定位到二进制的地址。

运行程序以后,会在程序运行目录下生成一个core文件:
记一次core 文件调试

调试开始:
记一次core 文件调试
输入gdb 程序名 core文件名 就可以调试了,这里输出了一堆的信息,太多不想看?继续输入bt试试:
记一次core 文件调试
就这样可以定位到问题了。

通过对比还是可以发现linux下调试还是要比windows好用,不同的操作系统。dll都不一样,然后我们就必须拷dll到我们的输出目录下,很麻烦。就这样了,over。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:记一次core文件调试-创新互联
网站链接:http://lswzjz.com/article/hpjii.html