恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

用 DrMemory 检测 SumatraPDF 内存错误与 Windows API 误用:配置、抑制与实战指南

  • 首页
  • 资讯中心
  • /
  • 用 DrMemory 检测 SumatraPDF 内存错误与 Windows API 误用:配置、抑制与实战指南

相关资讯

Windows与Linux虚拟机文件交换方案全解析:从拖拽到共享文件夹 2026/9/21 2:11:43
ccusage 仓库中使用 ast-grep 进行结构化代码检索:从 `run --pattern` 到关系规则与 `--debug-query` 2026/9/21 2:11:43
用 FLOW Leverage 阶段 Backlink Competition Prompt 构建证据导向的外链竞争分析交付物 2026/9/21 2:11:43

最新资讯

TypePHP编译器API参考:程序化调用PHP AOT编译器的完整指南
React Admin 实时数据提供者(Realtime Data Provider)接入完整指南:方法签名、内置适配器与自定义实现
VitePress 默认主题 Layout 指南:深入理解 doc、page、home 与自定义布局
Weex 鸿蒙化实践:js-base64 纯 JS 编解码库在 WebSceneAPI 中的集成与使用指南
ARIS 工作流总览:从 idea 到 paper 的 13 条 pipeline 如何一次看全
Chrome Apps UDP 网络访问实战:基于 chrome-extensions-samples 的 UDP Echo 客户端示例解析

今日推荐

OneUptime 自定义探针(Custom Probe)部署实战:私网监控、代理配置与断连排障全指南
大众TL52625前端框架材料要求详解:从性能测试到落地执行
TiXL 浮点运算算子库 Lib.numbers.float 完全指南:44 个算子的参数详解、源码原理与实战串联

本周热门

BrewUI:给Homebrew套上图形界面,让macOS软件包管理更简单
BrewUI:让Homebrew包管理变得可视化与高效
公式与文本对齐全攻略:从Word到LaTeX的实用技巧

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

用 DrMemory 检测 SumatraPDF 内存错误与 Windows API 误用:配置、抑制与实战指南

发布时间:2026/9/21 2:11:43
用 DrMemory 检测 SumatraPDF 内存错误与 Windows API 误用:配置、抑制与实战指南 用 DrMemory 检测 SumatraPDF 内存错误与 Windows API 误用配置、抑制与实战指南【免费下载链接】sumatrapdfSumatraPDF reader项目地址: https://gitcode.com/gh_mirrors/su/sumatrapdfDrMemory 是一款专门用于检测内存错误和 Windows API 误用的动态分析工具本文基于 SumatraPDF 开源仓库中 docs/md/Using-DrMemory.md 的真实实践记录展开完整还原开发者用 DrMemory 1.8.1 检查 SumatraPDF.exe 的完整流程——包括环境约束、命令行参数、日志目录与抑制文件suppression的编写方法。读完本文你将掌握如何为 SumatraPDF或其他 32 位 Windows 原生程序搭建 DrMemory 检测环境、如何区分真实缺陷与误报、如何通过drmem-sup.txt抑制已知误报并了解该工具在本次实践中的性能与稳定性局限。DrMemory 能做什么、为什么适合 SumatraPDFSumatraPDF 是一个体量庞大的 Windows 原生 C 程序源码集中在 src 目录其中 src/base 存放基础工具代码它直接操纵 GDI、COM、文件 I/O 与各种文档解析引擎内存错误和 Windows API 误用的风险点非常多。DrMemory 的核心能力正是针对这两类问题内存错误检测越界读写、释放后使用use-after-free、未初始化读取、内存泄漏、句柄泄漏等Windows API 误用检测非法参数、错误的返回值处理、违反 Windows 调用约定的用法。在 SumatraPDF 的开发流程中DrMemory 被作为与编译器静态分析、AddressSanitizerASan 并列的动态检测手段前者在运行时实跑程序并拦截错误后者在构建期插入检测代码。从源码结构看仓库中 src/base/Win.cpp 的GetMeasurementSystem()函数特意标注了// this triggers drmemory. Force no inlining so that its easy to write a localized suppression并使用__declspec(noinline)强制禁止内联——这正是为了让 DrMemory 的告警栈保持稳定、便于为单个函数编写精确抑制。这个细节说明项目开发者把 DrMemory 的抑制机制suppression当成了日常工作流的一部分而不仅是偶尔跑一次的工具。环境与版本约束先确认你能不能用原文档明确记录了实践时的环境这是使用 DrMemory 时必须遵守的硬性前提工具版本便携版portable1.8.1 RC1操作系统32 位 Windows 7重要限制该版本不支持 Windows 10也不支持 64 位 Windows。也就是说若你的开发机是 64 位 Windows 10/11这一版 DrMemory 无法直接运行。这决定了 SumatraPDF 侧的配合方式需要准备一个32 位Win32构建产物。从仓库当前的构建脚本 cmd/build.ts 可以看到Windows 构建输出目录按平台与配置区分rel3232 位 Release、rel6464 位 Release、dbg6464 位 Debug、prf64Profile对应out/下的同名目录。原文档命令行中的.\rel\SumatraPDF.exe就是旧版构建布局下 32 位 Release 产物的典型路径在今天等价产物位于out/rel32/SumatraPDF.exe。构建方式可参考 docs/md/Build-system.mdbun cmd/build.ts系列命令。完整实操准备日志目录、启动检测原文档给出了两条核心命令这里逐条展开并补充注释。1. 创建日志输出目录mkdir ..\drmemlogsDrMemory 默认会把检测报告写入日志目录建议与 SumatraPDF 可执行文件所在目录分开存放。原实践把日志目录放在仓库目录之外..\drmemlogs这样检测产生的大量日志不会污染源码树也便于整目录清理。2. 以受检方式启动 SumatraPDF..\drmemory\bin\drmemory.exe -logdir ..\drmemlogs -suppressdrmem-sup.txt — .\rel\SumatraPDF.exe ..\f1.pdf各段含义如下参数作用..\drmemory\bin\drmemory.exe便携版 DrMemory 的可执行文件路径按实际解压位置调整-logdir ..\drmemlogs指定检测日志与报告的存放目录-suppressdrmem-sup.txt指定抑制文件用于过滤已确认的误报—长破折号分隔符之后的参数全部传给被检测程序.\rel\SumatraPDF.exe被检测的目标程序32 位 Release 构建..\f1.pdf作为命令行参数传给 SumatraPDF 的测试文档需要特别说明命令行中的长破折号—U2014在原文档中是这样出现的实际书写时建议使用标准的分隔形式如--或直接将被检测程序放在-suppress参数之后以避免复制时出错。..\f1.pdf是一个用于复现问题的测试 PDF——检测通常带有目的性打开一个会触发崩溃或内存告警的具体文件比泛泛地跑一遍程序更有价值。检测过程中 DrMemory 会以慢速回放方式执行程序每一次内存访问都被拦截检查因此程序运行会明显变慢这是预期现象而非故障。检测结束程序退出或被终止后日志目录中会生成对应进程的报告其中列出 DrMemory 发现的内存错误与 API 误用并给出触发时的调用栈。处理误报维护drmem-sup.txt抑制文件动态内存检测工具在真实的大型 Windows 程序上几乎必然产生假阳性——原文档明确记录There are some apparent false positives.存在一些明显的误报。DrMemory 的告警栈中误报通常来自系统 DLL 内部的已知模式、第三方库的特定用法或是经过精心构造的合法代码例如上面的GetMeasurementSystem()场景。处理策略不是改代码而是把已确认的误报写入抑制文件让后续检测自动跳过这些告警运行检测收集全部告警逐个甄别能从代码逻辑证明是误报的记录到drmem-sup.txt再次运行检测确认剩余告警都是需要处理的真实问题。仓库中虽然没有现成的drmem-sup.txt但根目录下的 asan.supp 展示了同类抑制文件的实际写法——它是为 ASan 准备的抑制列表全部条目采用interceptor_via_lib:/interceptor_via_fun:前缀按库名或函数名精确归类如interceptor_via_lib:ucrtbase.dll、interceptor_via_fun:RegenerateUserEnvironment。DrMemory 抑制文件遵循类似的按模块/函数/调用栈特征匹配思路通常是逐条列出报告 ID 与匹配规则。你可以把 asan.supp 当作理解抑制机制的现成参照物。对应到源码层面src/base/Win.cpp 中GetMeasurementSystem()的__declspec(noinline)注释直接点名this triggers drmemory表明该函数会触发 DrMemory 告警很可能是GetLocaleInfoW这类系统调用与内部缓冲区交互的模式被误判因此刻意禁止内联保证告警调用栈稳定可匹配从而easy to write a localized suppression便于编写局部抑制。这是源码配合抑制文件的典型范例抑制不是掩盖问题而是把已知无罪的模式明确标记出来让检测聚焦在真正可疑的代码上。已知局限慢、而且 DrMemory 自己也会崩原文档如实记录了两点使用体验作为实践前必须知悉的限制明显拖慢程序如前所述全量内存拦截使程序运行显著变慢因此 DrMemory 适合在复现特定问题、短会话场景下使用不适合作为日常长时间运行的监控手段DrMemory 自身偶尔崩溃作者记录到it crashed for me with XPS files——在处理 XPS 文档时 DrMemory 本身发生崩溃。这意味着如果被测文件类型触发其自身缺陷需要更换测试文件或改用它法而不能据此断定被测程序有问题。换句话说DrMemory 的检测结果是工具视角的证据需要结合源码排查与人工复核不能无条件全盘采信。与其他内存检测手段的配合在 SumatraPDF 仓库中DrMemory 只是内存健康保障体系的一环若受版本限制无法使用如 64 位 Windows可参考仓库内的替代方案AddressSanitizerASan仓库构建体系 premake5.lua 与 cmd/build.ts 提供x64_asan平台64 位专用构建产物为out/dbg64_asan/SumatraPDF-static.exe运行时需随带clang_rt.asan_dynamic-x86_64.dll。其抑制文件 asan.supp 已在仓库中随附详见 docs/md/Build-system.md调试器手工排查崩溃与挂起问题可走 docs/md/Debugging-Sumatra.md 的 WinDbg 流程!analyze -v、~*kb等覆盖率工具docs/md/Using-OpenCppCoverage.md 展示了用 OpenCppCoverage 分析同一类原生代码的做法可与动态检测互补。小结DrMemory 实战要点围绕 SumatraPDF 的这份实践记录可提炼出以下可直接复用的操作清单核对环境确认 DrMemory 1.8.1 仅支持 32 位 Windows不支持 Win10/64 位并准备对应的 32 位 SumatraPDF 构建今日路径为out/rel32/SumatraPDF.exe准备目录与文件mkdir ..\drmemlogs建日志目录drmem-sup.txt用于累积抑制规则执行检测drmemory.exe -logdir ..\drmemlogs -suppressdrmem-sup.txt 目标exe 测试文档用具体文档触发问题场景甄别告警结合 src/base/Win.cpp 这类源码证据区分真缺陷与误报误报写入抑制文件可参考 asan.supp 的按库/按函数归类思路接受局限运行显著变慢、工具偶发自崩如 XPS 场景结果需人工复核必要时切换到x64_asan构建或 WinDbg 调试流程。这套动态检测 抑制文件 源码交叉验证的组合拳正是大型 Windows 原生应用在发布前排查内存问题时可复制的标准姿势。【免费下载链接】sumatrapdfSumatraPDF reader项目地址: https://gitcode.com/gh_mirrors/su/sumatrapdf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号