麒麟系统开发笔记(十):在国产麒麟系统上使用gdb定位崩溃异常方法流程以及测试Demo

本文介绍了如何在国产麒麟系统上使用gdb来定位Qt应用程序在release模式下的崩溃问题,包括创建测试应用、触发崩溃、查找coredump文件以及分析堆栈信息。文章还提到了系统默认coredump路径的特殊情况和解决办法。
摘要由CSDN通过智能技术生成

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/129858821

红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

国产麒麟系统相关开发

上一篇:《麒麟系统开发笔记(九):在国产麒麟系统上搭建宇视摄像头SDK基础环境Demo
下一篇:《麒麟系统开发笔记(十一):在国产麒麟系统上使用gdb定位崩溃异常方法流程进阶定位代码行数及专项测试Demo


前言

  本篇就适合代码崩溃的方法,可以定位到代码崩溃原因,测试Demo。


使用gdb定位Qt的release(国产麒麟系统)

步骤一:新建立一个简单的应用

  在这里插入图片描述

步骤二:造崩溃代码

DumpWidget::DumpWidget(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::DumpWidget),
    _pTimer(0)
{
    ui->setupUi(this);

    LOG << _pTimer;
#if 0
    if(!_pTimer)
    {
        _pTimer = new QTimer(this);
    }
#endif
    LOG << _pTimer;
    connect(_pTimer, SIGNAL(timeout()), this, SLOT(slot_timeout()));
    LOG << _pTimer;
    _pTimer->setInterval(1000);
LOG << _pTimer;
}

  在这里插入图片描述

步骤三:运行崩溃

  在这里插入图片描述

步骤四:为了更好的看到效果,加3s延迟

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

步骤五:定位到coredump文件

  默认目录/var/lib/system/coredump
  在这里插入图片描述

  没有,怎么弄国产麒麟系统都不会有得,因为生成在/tmp目录下了,查看“入坑一”:
  在这里插入图片描述

步骤六:定位位置

  在这里插入图片描述

  因为Demo堆栈不多,就一层,所以很容易定位,而实际程序可能达到几兆,几十兆,几百兆甚至1~2个GB。
  这里为了再次确认,gdb调试release版本没有添加任何额外pro语句尝试了一次:
  在这里插入图片描述

  (注意:不知道ubuntu是否这样可以,目前通过其他方法都需要加g或者qmake,这个持保留意见,后续进一步了解再补充了)
  (注意:后续通过“模拟实战”,发现能定位给到错误的函数,但是没有行号。)


模拟实战

  先加了一句代码:
  在这里插入图片描述

  运行崩溃:

  在这里插入图片描述

  定位coredump文件:
  在这里插入图片描述

  然后使用gdb的方法:

  在这里插入图片描述

  在这里插入图片描述

  定位不到,这个时候再按一下回车:

  在这里插入图片描述
(注意:发现能定位给到错误的函数,但是没有行号。)


现场另外一种情况

  在这里插入图片描述
  这个情况结合很早之前烤机的bug,QDateTime::currentDataTime().toString(“yyyy-MM-dd hh:mm:ss:zzz”)出现乱码,跑起来偶尔出现乱码,就会一直乱码,启动非乱码则非乱码,这个是qt和麒麟的兼容性问题,后续再议。
  这部分遗留问题,已经在下一篇文章中得到了解决,并且做了专项测试:《麒麟系统开发笔记(十一):在国产麒麟系统上使用gdb定位崩溃异常方法流程进阶定位代码行数及专项测试Demo


入坑

入坑一:没有生成coredump文件

问题

  默认目录/var/lib/system/coredump,目录为空,试了其他方法也不行。

原理

  默认生成在了/tmp目录下了,而不是coredump目录下。
  使用其他ulimit -c unlimited也不会,国产麒麟系统是对系统很多默认配置和路径做了强制修改的。

解决

  默认生成在了/tmp目录下了
  在这里插入图片描述


上一篇:《麒麟系统开发笔记(九):在国产麒麟系统上搭建宇视摄像头SDK基础环境Demo
下一篇:《麒麟系统开发笔记(十一):在国产麒麟系统上使用gdb定位崩溃异常方法流程进阶定位代码行数及专项测试Demo


若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/129858821

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt(长沙创微智科)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值