news 2026/6/15 14:58:10

如果你写的C++程序,在客户现场电脑(Ubuntu)频繁崩溃,如何排查原因

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如果你写的C++程序,在客户现场电脑(Ubuntu)频繁崩溃,如何排查原因

Ubuntu(Linux)现场C++程序频繁崩溃,直接照做就能排查的极简实战流程,不废话、全是现场能用的步骤,按顺序执行即可。

一、先立刻开启崩溃转储(必须做)

让客户终端执行:

bash

ulimit -c unlimited

然后在同一个终端里启动你的程序,崩溃后会生成 core 文件(core.xxx)。

作用:直接定位崩溃在哪一行、哪个函数。

二、用 gdb 直接看崩溃栈(最快定位)

bash

gdb ./你的程序 core.xxx

进入gdb后输入:

gdb

bt

会打印完整调用栈,直接看到崩溃行号。

常见崩溃原因(Ubuntu下90%都是这些):

1. SIGSEGV:空指针、野指针、数组越界、use-after-free

2. SIGABRT:double free、堆损坏、assert失败

3. SIGBUS:内存对齐错误、硬件/驱动问题

4. 栈溢出:递归太深、栈上开大数组

三、加日志(现场最稳、最通用)

在关键位置加线程安全日志,打印:

- 函数进入/退出

- 指针是否为空

- 数组下标、大小

- 文件/串口/网络返回值

- 线程ID

日志必须:

- 写到文件

- 每次写 flush

- 不要用cout缓存,崩了日志出不来

四、用 AddressSanitizer(内存问题神器,必试)

编译时加参数:

bash

g++ -fsanitize=address -fno-omit-frame-pointer -g main.cpp -o app

直接运行,越界、use-after-free、double free 都会直接报位置。

优点:

- 比valgrind快很多

- 现场可直接跑

- 几乎能抓到所有内存bug

五、线程问题排查(随机崩溃、难复现)

Ubuntu下用TSan:

bash

g++ -fsanitize=thread -g main.cpp -o app

运行后会直接报:

- 数据竞争

- 死锁风险

- 未加锁共享变量

六、Ubuntu现场环境排查(非常关键)

1. 系统位数:32/64?你编译的是否一致?

2. GCC/G++版本:本地高版本,现场低版本 → 崩溃、行为异常

3. 依赖库版本(Qt、protobuf、opencv、串口库等)

bash

ldd 你的程序

看.so是否缺失、版本不对

4. 权限:串口、USB、网卡、配置文件读写权限不足

5. 资源泄漏:

bash

top # 看内存是否一直涨

lsof -p 进程号 # 看句柄泄漏

七、Ubuntu 常用排查命令(直接抄)

bash

# 看系统内核崩溃信息

dmesg | grep 你的程序名

# 看程序崩溃信号

dmesg | grep segfault

# 看依赖库

ldd ./app

# 看系统日志

journalctl -xe | grep 你的程序

八、标准排查顺序(你按这个做,不会乱)

1. 开core,gdb bt → 拿到崩溃栈

2. 看崩溃类型:指针/内存/线程/库/权限

3. 加日志锁定范围

4. ASan跑一遍,抓内存bug

5. 核对Ubuntu环境、依赖库、权限

6. 代码检查:指针、智能指针、锁、数组边界、释放后置空

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 6:17:00

2026年 IT 转行就业,为何首选网络安全?五大核心优势深度解析

2025年IT转行/就业为什么首先要选网络安全? 记得曾经有人说过这样一个俗语:三百六十行,行行转IT。或许听到这个话的时候会觉得是一句玩笑话,但是浏览到网络上一些关于就业的文章,就能够明白这句话的真正意义所在。随着…

作者头像 李华
网站建设 2026/6/10 13:52:13

零基础怎么学网络安全?一文超详细详解,带你从入门到精通

一、学习建议 1.了解基础概念: 开始之前,了解网络安全的基本概念和术语是很重要的。你可以查找网络安全入门教程或在线课程,了解网络安全领域的基本概念,如黑客、漏洞、攻击类型等。 2.网络基础知识: 学习计算机网…

作者头像 李华
网站建设 2026/6/5 6:08:21

暗数据基础、挑战与管理策略

什么是暗数据?基础与挑战 暗数据和非结构化数据指的是同一事物。区别在于术语的指向对象不同。非结构化数据往往是面向工程师的术语。它指的是数据的结构特性,向工程师传达他们需要如何处理数据以使其可用。非结构化数据是未经提炼的数据,需…

作者头像 李华
网站建设 2026/6/10 7:25:48

毕设项目 stm32 wifi远程温控风扇系统

文章目录 0 前言1 主要功能2 系统架构3 核心软件设计3.3.2 初始化3.3.3 温度采集与显示 4 实现效果5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求&#xff0c…

作者头像 李华
网站建设 2026/5/29 7:34:47

计算机毕业设计springboot基于Java的哈佛大学在线考试系统 基于SpringBoot框架的高校智能考务管理平台设计与实现 Java Web技术驱动的顶尖学府数字化测评系统开发研究

计算机毕业设计springboot基于Java的哈佛大学在线考试系统23m0ma0b (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着教育数字化转型的深入推进,传统纸质考试模式…

作者头像 李华
网站建设 2026/6/15 13:35:34

一文看懂自然语言生成 - NLG

自然语言生成 – NLG 是 NLP 的重要组成部分,他的主要目的是降低人类和机器之间的沟通鸿沟,将非语言格式的数据转换成人类可以理解的语言格式。 什么是 NLG? NLG 是 NLP 的一部分NLP NLU NLG 自然语言生成 – NLG 是 NLP 的重要组成部分。N…

作者头像 李华