如何给SumatraPDF贡献代码?从构建、调试到提交PR的完整开发者指南
如何给SumatraPDF贡献代码从构建、调试到提交PR的完整开发者指南【免费下载链接】sumatrapdfSumatraPDF reader项目地址: https://gitcode.com/gh_mirrors/su/sumatrapdfSumatraPDF 是一款免费的开源多格式文档阅读器支持 PDF、EPUB、MOBI、CBZ、FB2、CHM、XPS、DjVu采用 (A)GPLv3 许可证发布。本文是一份面向新手贡献者的完整教程涵盖代码仓库结构、构建系统、调试技巧与提交 Pull Request 的全流程规范。1. 先读懂仓库SumatraPDF 的代码在哪里SumatraPDF 是一个面向 Windows 的 C 程序主要使用 Win32 API不使用 STL而是自带字符串/容器/辅助函数位于src/base/。上手前先记住这几个核心目录目录作用src/主程序 C 源码UI、引擎、文档模型等ext/第三方库最重要的是ext/mupdfPDF 渲染引擎vendored 内嵌cmd/BunTypeScript自动化脚本构建、代码生成、格式化tests/基于 Bun 的端到端 UI 测试脚本vs2022/生成的 Visual Studio 解决方案不要手动编辑docs/md/官方文档源文件应用内手册也来自这里官方贡献入口文档Contribute-to-SumatraPDF.md构建系统细节见 Build-system.md。2. 环境准备一键搭好 SumatraPDF 开发环境贡献 SumatraPDF 只需三样东西Visual Studio 2022免费的 Community 版即可安装时勾选「使用 C 的桌面开发」bun运行时——项目的几乎所有自动化任务都靠它完成构建、代码生成、跑测试、格式化git——获取仓库源码git clone https://gitcode.com/gh_mirrors/su/sumatrapdf官方约定Visual Studio 命令行工具cl.exe、msbuild.exe等应在 PATH 中可用构建脚本会直接调用它们。3. 构建 SumatraPDF一条命令出 exe构建的唯一入口是cmd/build.ts见 build.tsbun cmd/build.ts -dbg # 调试版 bun cmd/build.ts -rel # 发布版 bun cmd/build.ts -asan # 64 位 AddressSanitizer 版构建产物位于out/dbg64/SumatraPDF.exe静态目标为SumatraPDF-static.exe。几个新手容易踩的坑不要手改vs2022/下的工程文件。它由 Premake 5 从 premake5.lua 和 premake5.files.lua 生成只有增删源文件时才需要运行bun cmd/premake.ts重新生成ext/a-*目录是由 amalgam.ts 自动生成的「合订」代码严禁手改修改了src/下的.cpp/.c/.h后构建前请先对改动文件跑 clang-format第三方ext/代码除外。 技巧需要自定义编译宏时往 src/BuildConfig.h 里加#define即可无需改动工程配置。4. 调试 SumatraPDFWinDbg 与 -for-testing 标志4.1 日常调试Windbg 直接挂起官方推荐的调试方式agents.md 约定windbgx -Q -o -g ./out/dbg64/SumatraPDF.exe4.2 手动测试的黄金法则-for-testing启动 SumatraPDF.exe 做临时测试时务必传-for-testing参数它会强制新实例启动、不恢复上次会话、不保存设置——从而完全不干扰你正在使用的正式 SumatraPDF。4.3 崩溃与卡死排查用户侧的崩溃/卡死排查教程见 Debugging-Sumatra.md 与 Using-DrMemory.md。开发者调试崩溃时可结合cmd/下的辅助脚本analyze-crash.ts、crashes.ts。4.4 单元测试编译进 exe 的内置测试单元测试被编译进调试版的 SumatraPDF.exe推荐方式bun cmd/run-unit-tests.ts -dbg该脚本会构建调试 exe、带-unit-tests -for-ai运行并自动捕获断言/崩溃调用栈输出到out/config/unit-tests-*.txt无需等待调试器 UI。5. 写好测试tests/ 目录的命名约定SumatraPDF 的端到端测试是 Bun TypeScript 脚本驱动真实窗口做 UI 自动化FFI Win32 消息命名以 GitHub issue 号为准测试脚本tests/issue-编号.ts如 issue-6101.ts附带少量资源文件tests/issue-编号.ext资源较多时放入目录tests/issue-编号-data/一个合格的测试必须导出testit()并在文件末尾接上runStandalone独立运行器新测试要注册进 run-almost-all.ts太慢的加进 run-all.ts 的slowTests。验证修改时只跑受影响的单个测试如bun tests/issue-编号.ts不要动辄跑全量套件。6. 提交规范格式、commit message 与 PR 流程SumatraPDF 采用标准 GitHub 模型fork 仓库 → 提 Pull Request → 维护者审查合并。开始较大改动前建议先在 issue 区讨论。6.1 代码风格硬性约定摘自 agents.md头文件不放长篇注释解释性注释写在.cpp的定义处不用#pragma once字符串用自带StrL(...)/fmt()体系而非std::string修复 bug 时先写测试、看它失败、再写修复改动ext/mupdf时必须在同一提交中把改动记录为 ext/patches/ 下的.patch文件规则见 ext/patches/README.md否则下次升级 mupdf 会静默丢失改动。6.2 Commit message 七条军规主题行与正文之间空一行主题行 ≤ 50 字符72 为硬上限主题行首字母大写主题行不以句号结尾使用祈使句Fix bug 而非 Fixed——检验公式If applied, this commit will …正文手动折行于 72 字符正文解释 what 和 why代码自己解释 how。修复 GitHub issue 时把(fixes #编号)写在主题行末尾例如fix crash on committing an empty zoom value (fixes #5909)6.3 生成代码别手改新增高级设置、命令、命令行参数时改cmd/gen-*.ts后运行bun cmd/gen-code.ts重新生成对应的src/Settings.h、src/Commands.h、src/Flags.cpp并在 docs/md/Version-history.md 的下一版本区登记。7. 提交 PR 前的自查清单 ✅#检查项1bun cmd/build.ts -dbg通过且只运行了受影响的针对性测试2bun cmd/format.ts已跑prettier 管cmd/、tests/clang-format 管 C3没有手改生成文件ext/a-*、src/Commands.h、vs2022/4commit message 符合七条规则issue 号写在主题行末尾5新功能/命令/参数已同步更新docs/md/对应文档按这份指南走完构建、测试、调试、规范化提交四个阶段你的第一个 SumatraPDF PR 就具备被合并的完整要素了——祝提交顺利【免费下载链接】sumatrapdfSumatraPDF reader项目地址: https://gitcode.com/gh_mirrors/su/sumatrapdf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Readest OPDS 分组轮播实现解析:基于 react-virtuoso 的虚拟化横向卡片滑轨与懒加载封面

Readest OPDS 分组轮播实现解析:基于 react-virtuoso 的虚拟化横向卡片滑轨与懒加载封面

桌面应用跨平台前端 【免费下载链接】readest Readest is a modern, feature-rich ebook reader designed for avid readers offering seamless cross-platform access, powerful tools, and an intuitive interface to elevate your reading experience. 项目地址:…

2026/9/21 3:43:04 阅读更多 →
使用 Go 标准库 time 正确处理时间:Uber Go Style Guide 时间处理实践全解析

使用 Go 标准库 time 正确处理时间:Uber Go Style Guide 时间处理实践全解析

文档教程代码质量Lint 【免费下载链接】guide The Uber Go Style Guide. 项目地址: https://gitcode.com/gh_mirrors/gu/guide 点击查看 免费下载 导读 时间处理是 Go 开发中最容易被低估的复杂度来源——"一天有 24 小时""一小时有 60 分钟"…

2026/9/21 3:43:04 阅读更多 →
Toonflow是什么?AI短剧工厂完整指南:2小时把小说变成成片,创作效率提升10倍

Toonflow是什么?AI短剧工厂完整指南:2小时把小说变成成片,创作效率提升10倍

Toonflow是什么?AI短剧工厂完整指南:2小时把小说变成成片,创作效率提升10倍 【免费下载链接】Toonflow-app Toonflow 是一款 AI 短剧漫剧工具,能够利用 AI 技术将小说自动转化为剧本,并结合 AI 生成的图片和视频&#…

2026/9/21 3:42:03 阅读更多 →

最新新闻

windowsserver2003怎么给网站做域名解析对比评测

windowsserver2003怎么给网站做域名解析对比评测

3步搞定Windows Server 2003域名解析,老手揭秘性能优化避坑指南 域名服务器搞不懂,是很多老运维和新入行建站人员共同的噩梦。尤其是面对 Windows Server 2003…

2026/9/21 4:45:53 阅读更多 →
不懂代码想建站?电子商务主要就业岗位里哪家好

不懂代码想建站?电子商务主要就业岗位里哪家好

不懂代码想建站?电子商务主要就业岗位里哪家好 自己不会代码,却硬要搭个网站,这是很多中小老板踩过的坑。 别急着被“技术门槛”吓退,也别盲目找外包,问一句 哪家好 才是正道。 其实,搭建网站这件事,早就不是程序员的专利了。 只要选对路子,普通人也能把网站稳稳当当地立起来。 今天咱们不聊虚的,就聊聊在…

2026/9/21 4:32:34 阅读更多 →
合肥建站公司排名前十名揭秘:保姆级建站教程与选型指南

合肥建站公司排名前十名揭秘:保姆级建站教程与选型指南

合肥建站公司排名前十名揭秘:保姆级建站教程与选型指南 域名服务器配置报错,SSL证书部署失败,ICP备案卡在初审?别慌,这往往是新手在寻找 合肥建站公司排名前十名…

2026/9/21 4:18:24 阅读更多 →
ARIS 工作流总览:从 idea 到 paper 的 13 条 pipeline 如何一次看全

ARIS 工作流总览:从 idea 到 paper 的 13 条 pipeline 如何一次看全

ARIS 工作流总览:从 idea 到 paper 的 13 条 pipeline 如何一次看全 【免费下载链接】Auto-claude-code-research-in-sleep ARIS ⚔️ (Auto-Research-In-Sleep) — Lightweight Markdown-only skills for autonomous ML research: cross-model review loops, idea …

2026/9/21 4:06:15 阅读更多 →
Roc 格式化器幂等性测试实战:从 issue 8851 快照看多行分发与字段访问的格式化处理

Roc 格式化器幂等性测试实战:从 issue 8851 快照看多行分发与字段访问的格式化处理

Roc 格式化器幂等性测试实战:从 issue 8851 快照看多行分发与字段访问的格式化处理 【免费下载链接】roc A fast, friendly, functional language. 项目地址: https://gitcode.com/GitHub_Trending/ro/roc 导读:本文以 Roc 编译器仓库中的快照测试…

2026/9/21 4:04:14 阅读更多 →
TypePHP编译器API参考:程序化调用PHP AOT编译器的完整指南

TypePHP编译器API参考:程序化调用PHP AOT编译器的完整指南

TypePHP编译器API参考:程序化调用PHP AOT编译器的完整指南 【免费下载链接】typephp Compile PHP to Native Binaries 项目地址: https://gitcode.com/GitHub_Trending/ty/typephp TypePHP 是一款用 PHP 编写的原生 AOT 编译器(tpc)&a…

2026/9/21 4:04:14 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →