xdebug:一个面向跨平台 Native 服务的 TCP 调试入口

很多 Native 服务一旦跑起来,最难处理的不是"有没有日志",而是"我现在能不能在不中断进程的情况下问它几个问题"。 比如一个投屏服务、音视频服务或嵌入式后台任务,现场经常需要临时确认: 当前模块是否还活着。 编码器参数是否按预期生效。 某个状态机卡在哪一步。 是否可以临时触发一次 IDR、刷新、重连或 dump。 日志之外的运行时状态能不能直接读出来。 只靠日志不够。日志是被动输出,调试入口是主动查询。xdebug 的目标就…

一切皆文件,epoll 事件驱动编程与实用技巧

epoll 经常被介绍成"高性能网络 I/O 多路复用接口",这句话没错,但它只讲了最常见的一半用法。 在真实工程里,epoll 更像一个统一的事件入口。网络读写、退出通知、信号处理等事件都可以汇入同一个 wait 点,主线程只需要围绕这个 wait 点做分发,而不必在多个阻塞点和轮询逻辑之间来回切换。 这篇文章会围绕 Linux "一切皆文件" 的设计思想,整理几个 epoll 的实用技巧: 用 socketpair 或 signa…

C++ 崩溃栈回溯:从原理到工具,手把手教你看懂 crash

一、问题背景 C++ 程序线上崩溃时,最常见的日志可能只有一句: Segmentation fault (11) 这句话只告诉我们程序收到了 SIGSEGV,也就是访问了不该访问的内存。但它没有告诉我们: 崩溃发生在哪个函数。 这个函数是谁调用的。 对应源码文件和行号是什么。 线上 release 二进制被 strip 后还能不能还原现场。 crashtrace 这个仓库就是为了解决这个问题:它把 C++ 崩溃栈能力拆成一套小型库、…

AirPlay 投屏设备发现

背景:设备发现到底是什么? AirPlay 设备发现不是"手机去扫局域网里所有 IP",而是通过 mDNS/DNS-SD 完成的。 可以把它理解成局域网里的"小广播查询": Apple 设备向 224.0.0.251:5353 或 IPv6 的 ff02::fb:5353 发 UDP 组播查询。 查询内容是"谁提供 _airplay._tcp.local 服务?"以及"谁提供 _raop._tcp.local 服务?"。 Airpl…

Zephyr LVGL 异常显示问题分析

本文记录一次 Zephyr + LVGL + qemu_riscv64 的问题排查过程。表面现象是图形界面显示异常,最开始很像 ramfb 驱动或者像素格式问题;最终定位下来,根因其实是 main() 线程栈太小,导致 LVGL redraw/flush 路径运行时栈溢出。 目标样例是: zephyr/samples/subsys/display/lvgl 最终修复落在: zephyr/samples/subsys/display…