程序发生Segmentation fault怎么办?Core Dump和GDB怎么定位?-嵌入式Linux面试

浏览量:21
时间: 2026-11-05 11:43:23

ENGINEER INTERVIEW · 嵌入式Linux /

嵌入式Linux工程师高频面试,讲解SIGSEGV、Core Dump、gdb bt、调试符号、交叉调试和内存越界根因分析。

面试回答,先讲核心结论

Segmentation fault通常表示进程访问了无效或无权限访问的内存,例如空指针、越界或释放后继续使用。定位时先保留崩溃环境与版本,再获取Core Dump或通过GDB现场复现,结合崩溃线程、调用栈和变量值确定错误访问点;但栈顶位置不一定是最早破坏内存的位置。

01 / 先确认符号和Core文件是否可信

在允许调试的环境编译时加入-g等调试信息,确保设备上运行的ELF与本地符号文件匹配;针对交叉编译设备,还需使用对应架构的gdb/gdb-multiarch以及合适的sysroot。

检查core转储配置和文件权限。实际系统中可能由systemd-coredump、apport或自定义服务接管,不应仅依赖当前目录里一定出现core文件。

真实Linux命令行使用GDB载入core文件并执行backtrace显示Segmentation Fault调用栈

02 / GDB基本排查顺序

例如使用gdb ./app core文件载入可执行文件与core;使用bt查看当前线程调用链,info threads查看线程,thread apply all bt查看所有线程,并在关键帧检查参数和局部变量。

对优化后的程序,部分变量可能被优化掉或栈帧不完整;必要时通过可复现的调试构建、ASan或其他内存检查手段进一步验证。

03 / 为什么出错位置未必是根因

01.数组越界或Use-After-Free可能先破坏其他内存,直到稍后访问才触发崩溃。需要结合最后一次正常操作、边界条件、对象生命周期和并发竞争追溯。

02.修复后要编写回归场景,覆盖空指针、异常长度、并发调用和资源释放路径,不应只把触发崩溃的那一行做空指针判断就认为全部解决。

面试中容易失分的地方

把SIGSEGV简单等同“内存不够”,或者只凭GDB第一行地址就断言问题根因,会漏掉历史内存破坏与多线程条件。

面试官可能继续追问

如果Core里的栈信息显示在libc的memcpy崩溃,但你怀疑更早的缓冲区越界,该怎样验证?


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
LLC谐振电源怎么设计?谐振腔怎么算?软开关和频率控制怎么理解?电源面试

一句话答案LLC 是谐振型隔离电源,由谐振电感 Lr、谐振电容 Cr、励磁电感 Lm 组成谐振腔;通过改变开关频率调节输出电压,谐振点附近效率最高;原边 MOS... 详情>>

2026-10-07 10:02:27
射频电路面试:S11很好为什么S21仍可能很差?VNA上匹配、插损和Smith图要分开看

射频面试里经常有人看到S11低于-10 dB就说“电路很好”。但S11只描述端口反射,不能代表信号一定有效传到输出端。滤波器、放大器、馈线或匹配网络还要结合S2... 详情>>

2026-10-20 14:03:55
射频低噪声放大器LNA怎么设计?噪声系数NF、增益、匹配怎么选?射频面试

一句话答案LNA 是接收机第一级,关键指标是噪声系数 NF(越低越好,一般 0.5~2dB)和增益(10~20dB);输入匹配要同时满足噪声匹配(最小 NF)和... 详情>>

2026-10-07 10:02:10
PCB仿真面试:回流路径断了会怎样?跨分割、参考面和场分布要这样分析

高速信号不是只有一根“信号线”。真正的电磁通道包括信号导体和参考面的回流路径。面试官问跨分割时,重点是你是否理解回流电流为什么会绕路、环路面积为什么会变大,以及... 详情>>

2026-10-16 20:19:00
传导骚扰CE怎么测试与整改?LISN是什么?共模和差模噪声怎么区分?EMC面试

一句话答案传导骚扰 CE 测 150kHz~30MHz 电源端口的传导噪声,用 LISN(线路阻抗稳定网络)隔离电网+提供 50Ω 阻抗+耦合噪声到频谱仪;噪声... 详情>>

2026-10-07 10:01:53
开班信息