news 2026/7/2 2:39:04

如果你写的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/7/1 8:55:01

Yolov7模型训练指南:从环境搭建到最终应用

1. 环境搭建1.1 【 设备与系统配置 】我使用的设备配置为V100显卡双卡,总显存64GB,操作系统为Ubuntu 18.04,Python版本为3.7.10。在这样的环境下,我可以顺利地进行yolov7模型的训练。1.2 【 代码获取与准备 】在搭建好环境后&…

作者头像 李华
网站建设 2026/7/1 15:49:39

告别低效繁琐!千笔·专业降AI率智能体 VS 文途AI,研究生专属降AI率工具

在AI技术迅速渗透学术写作领域的当下,越来越多的研究生开始借助AI工具提升论文撰写效率。然而,随着各大查重系统对AI生成内容的识别能力不断升级,如何有效降低AI率、避免重复率超标,已成为众多学生面临的核心难题。面对市场上五花…

作者头像 李华
网站建设 2026/7/1 14:30:17

Golang构建AI智能体社交网络:MoltBook分布式架构实战

引言 2026年初,全球首个专为AI智能体设计的社交网络平台MoltBook在科技圈引发轰动。在短短48小时内,超过15万个AI智能体涌入平台,自发形成了上万个主题社区(Submolts),甚至诞生了名为"龙虾教"(Crustafarianism)的虚拟宗教。这一现象级实验不仅展示了AI群体自…

作者头像 李华
网站建设 2026/7/1 8:54:51

Transformer架构深度解析

🧠 Transformer架构深度解析:从“注意力”到“理解”的革命 Transformer架构是人工智能领域近十年来最具颠覆性的创新之一,它不仅是GPT、BERT等大语言模型的基石,更是推动了自然语言处理乃至整个深度学习范式的变革。其核心思想完全抛弃了传统的循环(RNN)和卷积(CNN)…

作者头像 李华
网站建设 2026/7/1 5:36:46

最近在折腾C#和欧姆龙PLC通信,发现网上完整的HostLink协议实现案例不多,自己啃手册写了套基础通信框架。直接上干货,先扔个读取DM区的代码

C#上位机与omron欧姆龙 Host Link通信串口通讯实例 源码 通过和PLC用串口连接,可以读取写入欧姆龙PLC的数据寄存器DM(批量也可以)、输入输出CIO、辅助继电器WR,H保持继电器等。 c#基于VS2015以上版本 // 串口配置 SerialPort sp new Serial…

作者头像 李华
网站建设 2026/7/1 7:43:52

使用Nginx搭配GeoIP2实现根据IP自动跳转国家站点

前言 在现代Web应用中,根据用户的地理位置提供不同的内容是一种常见的需求。本文将详细介绍如何使用Nginx和GeoIP2模块实现按国家或地区的智能路由的功能,我们可以实现更加精准的内容分发、个性化的用户体验和合规化的服务策略。 这里只实现了根据国家或…

作者头像 李华