Skip to content

About

Use procdump to get full sized dmp file.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

get_dump_full —— Lertaro 诊断包收集工具

Lertaro 崩溃、闪退或功能异常之后,双击运行它,把排查需要的资料收进一个 ZIP 交给开发者。全程在本机完成,程序不联网、不上传任何东西,文件要不要发出去由你决定。

跑一遍是什么样

  1. 双击运行。程序会请求一次管理员权限,读服务日志、抓别的进程的内存都需要它。
  2. 命令行窗口第一行打印版本号。
  3. 接着弹第一个对话框,问你现在是否已经复现了问题。点取消就到此为止,不读任何文件,也不建任何目录。
  4. 点确定后弹第二个对话框,问这次是不是搜索结果排序不对(该靠前的排到了后面、类型顺序不对、结果少了一条)。答“是”走排序专用路径:只收系统信息与目录权限、Lertaro 的日志、设置和排名校准记录,不查错误事件,不收 Windows 错误报告和机器上已有的崩溃转储,也不抓内存转储,几秒钟就完。答“否”按下面的崩溃流程走。命令行加 --ranking 就是替你把这一问答了,不再弹第二次。
  5. 先采集不碰进程内存的那部分:系统与硬件信息、目录权限、账户与 UAC、.NET 环境,然后是 Lertaro 的日志、最近 24 小时的错误事件、Windows 错误报告和机器上已经存在的崩溃转储。
  6. 这些落盘之后问一个问题:这次问题跟内存有没有关系。答“否”抓迷你转储,23 MB 左右,抓取只要几秒,ZIP 按 -mx=1 压一遍,实测 25 MB 的包压到 7.5 MB 左右,多花的时间不到半秒。答“是”抓包含堆内存的完整转储,实测 660 MB、打包后 216 MB,能查内存越用越大、对象为什么是 null、缓存里存了什么,代价是抓取期间电脑可能卡顿 3-5 分钟,所以动手之前会再弹一个对话框,提醒你这会儿别操作鼠标键盘。 “结果不对”“界面异常”这类问题不是内存问题,加 --no-dump 直接跳过这一步:不弹这个问题,不抓转储,包小一个数量级,采集和打包都快得多。
  7. 转储写完再打包 ZIP。
  8. 打包完成后问你要不要打开上传站点。最后弹一个对话框,点确定关窗口。

提问全部是对话框,用鼠标点,不需要键盘输入。没人点按钮,程序就一直等着。

诊断包在哪

当前工作目录下的 <时间戳>-<进程号>.zip,双击运行时这个目录就是程序所在目录。想放到别处用 --zip <路径>:路径以 .zip 结尾就按这个名字写,否则当成目录,文件名照旧。

上传时把 ZIP 拖进页面,页面会给一张一次性传输票据,把票据发给开发者即可。不限速、不用登录,但开发者收完之前别关掉那个浏览器窗口。别用百度网盘这类会限速的网盘,开发者往往拿不到完整文件。

里面有什么

  • 系统与硬件信息(机型、CPU、显卡、内存、磁盘、显示器、区域设置等)
  • 安装目录、配置目录,以及正在运行的那个副本所在目录与它 Data 目录的 NTFS 权限
  • 当前账户、令牌里的组与权限、UAC 设置
  • .NET Framework 与 .NET 7/8/9/10 的安装情况
  • Lertaro 的日志和数据文件:完整版从 %LOCALAPPDATA%\Lertaro 和 %ProgramData%\Lertaro 采集,便携版从正在运行的那个 Lertaro 目录下的 Data 采集,两种同时在跑就两边都收进包里的不同目录
  • 数据文件只有这几个:user-settings.json、plugin-settings.json、machine-settings.json 和它们的 .bak.<编号>、.legacy-<编号>.json 轮换,加上搜索排名的校准记录 ranking-events.jsonl 与它按大小轮转出的 ranking-events.<编号>.jsonl;放在同一个文件夹里的私钥、搜索历史、索引缓存一律不收
  • 最近 24 小时提到 Lertaro 的系统错误事件、Windows 错误报告,以及机器上已经存在的 Lertaro 崩溃转储
  • manifest.json:这个包自己的清单,逐条列出实际收进来的文件与字节数,写明本次有没有转储(skipped / mini / full),以及下面这段隐私说明
  • Lertaro 正在运行时的内存转储(--no-dump 时不收)

校准记录里每条只有查询和路径的 12 位截断哈希,其余字段全是数字:段位、分数、类型序、规则优先级、历史档位、匹配形状、名字长度、路径深度、扩展名类别(0 无扩展名或目录、1 .lnk、2 .exe、3 .url、4 .appref-ms、5 其它)。每页开头还有一行页面信息,带本轮的结果类型顺序,元素是 __builtin::Files 这类插件类型名,不是你的输入。所以它能回答“为什么这一行排在那一行前面”,却不含你输入过的文字、你的路径或文件名。它单个文件长到 10 MB 才转一次,最多留 30 天,所以最多三个文件、约 30 MB。

包里的这块叫 state:state/user 和 state/service 是完整版的两个身份,state/portable/<副本目录名>/ 下面每个便携副本的 machine 和各个账户,每个身份一个文件夹,里面 logs 和 data 两棵树。

Data\Users 下同一个人可能有好几个文件夹:账户 SID 有单重和双重两种哈希写法,服务还会以自己的 SYSTEM 身份留下一个,光看名字分不出哪份设置最新。所以包里的账户文件夹按它自己 user-settings.json 的最后写入时间重命名,形如 2026-10-22_00-12-00-515__9b0e03c2,末尾是原名开头八个字符;原名和真实路径记在同一个副本目录的 folders.txt 里。只有校准记录、没有设置的文件夹不参与,仍用原名。重命名只发生在包里。

内存转储是复现那一刻的原样快照,可能带着剪贴板内容、正在编辑的文字,还有已经登录的令牌。设置文件里是你填过的路径和插件配置。确认接收方可信之后再发。

任何一步失败都不影响其余采集和打包,错误只写进包里的 run.log。

它不碰什么

  • 不读浏览器数据、凭据管理器和其他程序的文件
  • 注册表只查询,不写入
  • 不修改、移动或删除任何被采集的文件,写入的只有临时工作目录和 ZIP 的目标位置。上面那些日期名字也只写在包里,被采集的文件夹一个都不改名:那个名字是程序每次启动按账户算出来的路径,改了它就等于让下次启动认不出这个账户
  • 不安装服务,不改任何目录的权限

界面语言

按系统的显示语言选中英文,不用参数,也不用配置文件。文案存在按语言分开的哈希表里,加一门语言就是加一张表。给开发者读的东西保持原样:run.log、manifest.json、state 目录下的 folders.txt、system 目录下的报告,以及各个外部程序自己的输出。

其他参数

--help、-h 和任何认不出的参数都只打印版本号和用法,附上项目地址,不采集,也不写文件。

--no-dump 只收状态不收内存:不弹“是否与内存有关”,不抓转储,manifest.json 里记 "dump": "skipped"。诊断结果不对、界面异常这类不想抓内存转储的问题时用这个。--zip 可以和它一起用。

--ranking 是替你把第二个对话框答了:不弹那一问,不查错误事件、Windows 错误报告和已有的崩溃转储,也不抓转储,manifest.json 里记 "purpose": "ranking" 和 "dump": "skipped"。它自带 --no-dump 的效果,不用两个一起写。

构建与第三方

cargo build --release 需要 MSVC 工具链,产物在 target\release\get_dump_full.exe。

程序内嵌 7-Zip、fastfetch 和 ProcDump,运行时解到临时目录使用,各自许可见 res\ 下的许可文件。对话框来自 win_msgbox_timeout(MIT)。本项目采用 MIT,见 LICENSE。

About

Use procdump to get full sized dmp file.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages