2026-05-25
很多 Native 服务一旦跑起来,最难处理的不是"有没有日志",而是"我现在能不能在不中断进程的情况下问它几个问题"。
比如一个投屏服务、音视频服务或嵌入式后台任务,现场经常需要临时确认:
当前模块是否还活着。
编码器参数是否按预期生效。
某个状态机卡在哪一步。
是否可以临时触发一次 IDR、刷新、重连或 dump。
日志之外的运行时状态能不能直接读出来。
只靠日志不够。日志是被动输出,调试入口是主动查询。xdebug 的目标就…
2026-05-21
epoll 经常被介绍成"高性能网络 I/O 多路复用接口",这句话没错,但它只讲了最常见的一半用法。
在真实工程里,epoll 更像一个统一的事件入口。网络读写、退出通知、信号处理等事件都可以汇入同一个 wait 点,主线程只需要围绕这个 wait 点做分发,而不必在多个阻塞点和轮询逻辑之间来回切换。
这篇文章会围绕 Linux "一切皆文件" 的设计思想,整理几个 epoll 的实用技巧:
用 socketpair 或 signa…
2026-05-19
一、问题背景
C++ 程序线上崩溃时,最常见的日志可能只有一句:
Segmentation fault (11)
这句话只告诉我们程序收到了 SIGSEGV,也就是访问了不该访问的内存。但它没有告诉我们:
崩溃发生在哪个函数。
这个函数是谁调用的。
对应源码文件和行号是什么。
线上 release 二进制被 strip 后还能不能还原现场。
crashtrace 这个仓库就是为了解决这个问题:它把 C++ 崩溃栈能力拆成一套小型库、…
2026-05-16
背景:设备发现到底是什么?
AirPlay 设备发现不是"手机去扫局域网里所有 IP",而是通过 mDNS/DNS-SD 完成的。
可以把它理解成局域网里的"小广播查询":
Apple 设备向 224.0.0.251:5353 或 IPv6 的 ff02::fb:5353 发 UDP 组播查询。
查询内容是"谁提供 _airplay._tcp.local 服务?"以及"谁提供 _raop._tcp.local 服务?"。
Airpl…
2026-04-09
本文记录一次 Zephyr + LVGL + qemu_riscv64 的问题排查过程。表面现象是图形界面显示异常,最开始很像 ramfb 驱动或者像素格式问题;最终定位下来,根因其实是 main() 线程栈太小,导致 LVGL redraw/flush 路径运行时栈溢出。
目标样例是:
zephyr/samples/subsys/display/lvgl
最终修复落在:
zephyr/samples/subsys/display…