ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

为什么AnyPS5的每个函数都“要么做对要么抛异常“?项目错误处理哲学与技术债清单

为什么AnyPS5的每个函数都“要么做对要么抛异常“?项目错误处理哲学与技术债清单 为什么AnyPS5的每个函数都要么做对要么抛异常项目错误处理哲学与技术债清单【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/gh_mirrors/an/AnyPS5AnyPS5是一个将 PS5 可执行文件自动移植到 Linux 和 Windows 的开源工具由重链接器和系统 PRX 库实现组成不依赖任何模拟器或额外运行时进程。正因如此它立下了一条严苛的铁律每个函数要么精确完成它该做的事要么抛出异常——这正是 AnyPS5 错误处理哲学的核心也是读懂这个项目的最佳入口。AnyPS5 是什么一句话概括它不是模拟器而是移植器。relinker把可执行文件转换为目标系统Linux/Windows的原生格式系统 prx 库用 C 重新实现 PS5 系统 API支持动态链接官方兼容游戏列表见 COMPATIBILITY.md其中《Dreaming Sarah》已在 GTX 1050 Ti 上稳定跑满 60 fps在没有模拟层兜底的前提下出错怎么办就成了整个项目的生存问题。错误处理哲学三条铁律这套哲学写在 CONTRIBUTING.md 里每一条都直接可执行1. 未实现的函数显式失败绝不装死未实现的导出函数统一调用NotImplemented_nid_no_patch(__func__)例如 libSceAudioIn/Export.cpp 中的每个函数都如此。程序不会悄悄返回看似正常的假数据而是让你第一时间知道这个 API 还没实现。2. 缺少导入启动即失败拒绝降级运行Missing imports fail at startup with a clear error; dont replace them with fallbacks that keep running.启动时缺少关键符号程序会带着清晰的错误信息直接退出。宁可秒退也不带着残缺状态苟活着——因为静默降级产生的错误会沿着调用链扩散排查成本指数级上升。3. 静默桩Silent Stub只准当最后手段静默桩只有在同时满足两个条件时才被允许它能解锁一款游戏标题unblock a title只影响 UI 层逻辑而且每新增一个都必须登记到 TechnicalDebt.md 的清单中。目前全项目仅剩两处被容忍的例外libSceSaveDataDialog.native 和 libSceCommonDialog。异常落地fromwhat()to 进程终止按 README 的说明AnyPS5 对所有不支持或意外的状态严格抛出std::runtime_error异常触发what()信息打印到 stderr进程立即终止这套机制并非空喊口号——连异常运行时本身__cxa_throw、栈展开、std::terminate处理等都是由项目自研的 Runtime.cpp 实现的guest 侧抛出的异常在宿主侧同样会走到what()→ stderr → abort 的确定路径不留任何半死不活的中间态。技术债清单诚实的已知问题登记表项目把我们还没做好什么集中记录在 docs/dev/TechnicalDebt.md分四大类非常值得贡献者精读分类内容示例构建Windows 下需要特定版本 MinGW-w64 GCC 15.2.0静默桩仅 2 处 UI 层例外见上文未知函数信息十余个无法确定名称或签名的符号NID如 libkernel 的__progname功能性着色器重编译应前移到 relinker 阶段、生成的可执行文件会弹控制台窗口、JPEG 编码器 采样格式受限、--to-intel指令降低尚有覆盖盲区等配合 CONVENTIONS.md 里代码注释只允许用于标注技术债的规定这份清单实际上就是项目的活文档——没有注释债务清单本身承担了注释的职责。总结AnyPS5 的错误处理哲学可以浓缩为一句话快速失败诚实登记。不模拟、不降级、不静默——每个失败都大声说出来每笔欠账都写进清单。对于想学习严谨 C 工程实践、或者参与 PS5 移植生态的开发者来说这套哲学本身就是这个项目最有价值的教材之一。【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/gh_mirrors/an/AnyPS5创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表