问题排查
问题排查类成品文章(排查实录、故障案例),从 1-知识 的素材重写整理而来。
- pybind11 回调线程析构 self-join 崩溃排查 —— Python 引用计数托管的对象在自身回调线程 decref 到零:析构链同步销毁 join 自己,EDEADLK 35 与 this 比对定案,防御、移线程、异步收尾三层修复
- C++ 链接报错:Dso missing from command line —— 工具链升级后隐式依赖暴露:ld 不解析间接依赖符号与发行版 --as-needed 默认两大机制、库顺序单向扫描,从显式补 -l 到 --copy-dt-needed-entries 的五种修法与取舍
- C++ 退出期 double free 排查:静态对象析构顺序 —— 栈底 __cxa_finalize 的退出期崩溃:静态注册表析构链访问另一静态表;为什么改成 Meyers 单例修不好,泄漏式指针与 atexit 提前清理两种可靠修法
- Protobuf 转 JSON 默认字段不显示:presence 语义与打印选项 —— 隐式 presence 字段取默认值被省略的规范来源,always_print_primitive_fields 强制输出与新 API 改名,optional 字段按 has 语义的边界
- fstream 写入失败排查:流状态与截断重开 —— 读到 EOF 后写静默失败、clear 后变追加的机制,trunc 截断重开与 seekp 覆盖不截断的局限
- eXtremeDB ARM 构建失败排查 —— 发行包自带 DDL 编译器是 x86_64 的:Exec format error 与 GLIBC_2.34 报错定位、替换系统 glibc 的弯路、回 x86_64 主机交叉编译的正解
- Git 子路径分支创建失败:refs 文件与目录冲突 —— refs/heads 路径互斥导致
test/xxx分支建不出来:根因、三行最小复现、换名与清分支两种解法 - CLI11 退出段错误:插件库卸载时序排查 —— 子命令析构代码留在插件 so、PluginManager 先析构触发 dlclose,调用栈特征与声明顺序解法,附成员声明顺序形态与 RAII 句柄前提
- SIGSEGV core 排查:区分真实崩溃与 kill 自杀 —— si_code 指纹判别信号来源、union 别名陷阱、全线程 bt 过滤与反汇编找 kill 调用方
- C++ 链接错误:未定义的虚表引用排查 —— vtable 的 key function 生成规则,CMake 源目录拼错的隐蔽根因
- 开发板 home 分区未挂载排查 —— 分区存在但文件系统容量对不上:blkid/df 定位,resize2fs 在线扩容修复