跳至主要內容
Surface View 异常释放引起的 Segv Fault

背景

最近在研究通过 Rust 进行 Android Native 渲染的相关内容,基本方法是,在 Android 里创建一个 Surface View,然后在 OnSurfaceCreated 方法处,将一个 SurfaceHolder 通过 JNI 传到 Rust 层,获取 ANativeWindow 指针,同时搭配raw_window_handlerwgpu进行渲染。当然这里还有很多细节,例如 Rust 侧事件循环的设计等等,后续有时间可以单独出一篇特辑。

Bug 出现

Bug 的出现首先要从 Andoird 的刷新原理开始讲起(无特别说明,以下部分的安卓版本均为测试机版本——Android 12)


Chiichen大约 2 分钟杂谈Debug杂谈Android
解决MacOS中找不到头文件的问题

背景

在交叉编译 LVGL 的时候一直出现找不到头文件的问题,但是 Intellisense 却又能定位到头文件位置

解决方法

因为 MacOS 中的头文件不在usr/include等目录下,而是在/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/目录下,创建这个软连接后就解决了问题

sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

Chiichen小于 1 分钟杂谈Debug杂谈MacOSDebug
记一次 GP Debug 的心路历程

背景

背景是在重构完 Signal 之后,一开始用我们自己的 libc 测试 signal 功能没有问题,但是在用 relibc 测试的时候出问题了,出错的原因就是一个 Userland 的 General Protection(GP),这个东西是一个硬件异常,通常是由于汇编指令出错或者内存访问出错导致,比如把一个未对齐的内存地址作为某个指令的操作数,而这个指令要求这个内存地址是 8/16 对齐的。

初步分析

在查看 GP 的 RIP ,反汇编了用户空间的测试程序之后,看到了对应的汇编代码是

movapd %XMM0 0xe0(rsp)

Chiichen大约 7 分钟杂谈Debug杂谈General ProtectionDebug