GolinksPRO Download Manager
  1. 主页
  2. 帮助
  3. 崩溃报告

崩溃报告

If GolinksPRO Download Manager closes unexpectedly or stops responding, a crash report window opens. It shows what happened, lets you read the whole report, and can send it to the developers on GitHub. Each report helps fix the problem for everyone.

The crash report window after GDM stopped responding

您会看到什么

  • GolinksPRO Download Manager closed unexpectedly: GDM crashed, or hit an internal error and closed.
  • GolinksPRO Download Manager stopped responding: its window didn't answer for 8 seconds. GDM is still running, frozen. End and restart GDM closes the frozen copy and starts a new one. If GDM answers again by itself, the window says so.

在窗口中:

  1. 发生时您在做什么?是可选项。写几个字就很有帮助,例如“我打开了添加 URL”。
  2. 报告会显示所有将要发送的内容。您可以先阅读。
  3. 在 GitHub 上发送会在浏览器中打开 GitHub 的崩溃报告表单,并预先填好内容,同时打开报告所在的文件夹。将报告文件拖到表单中,检查后提交。您需要一个 GitHub 帐户。不会自动发送任何内容。
  4. 如果有人已经报告了相同的问题,窗口会显示(已报告为问题 #…)。打开已报告的问题会打开该问题,并将您的报告复制到剪贴板,以便您将报告作为评论添加。

The other buttons copy the report, open its folder, or start GDM again.

报告包含的内容

  • What happened: the error and the place in GDM's code where it happened.
  • The stack: the place in GDM's code where it crashed or froze, and what every other part of it was doing.
  • GDM's recent log: for example "command AddUrl" or "window opened: add-url".
  • The system: GDM's version and how you installed it, your operating system and its version, the processor, the language and theme, and how many downloads and queues you have. These are counts only.

不包含以下内容:

  • 下载地址或文件名;
  • 用户名(在文件夹路径中显示为~)。

如果错误消息引用了您输入的内容,该内容也会包含在报告中,因此发送前请先阅读报告。

The crash data file (.dmp) is a snapshot of what GDM was running at that moment. It helps the developers most, but it can hold pieces of what GDM had in memory, such as download addresses, cookies and saved passwords. It is only attached when you tick Also attach the crash data.

报告保存位置

In GDM's data folder:

  • crashes\:每个报告 (.txt) 及其崩溃数据 (.dmp);
  • logs\: GDM's log (mdm.log, with older ones as mdm.1.log and so on, 2 MB each).

GDM's data folder is %APPDATA%\misterdownloadmanager on Windows, ~/Library/Application Support/misterdownloadmanager on macOS, and ~/.local/share/misterdownloadmanager on Linux. In portable mode it is the data folder next to the program.

The log records what GDM does, so a report can show what led to a problem. To log more detail, start GDM with the environment variable MDM_LOG=debug.

开发者信息

How it works: a second copy of GDM, the monitor, starts beside it with --crash-monitor. The crash code lives in crates/crash and crates/app/src/crash.rs.

  • Catching problems. When GDM crashes (a Windows exception, a signal on Linux, a Mach exception on macOS), panics, or freezes, it asks the monitor for a dump. A freeze is a frame of the window running more than 8 s, seen by a watchdog thread that ignores time spent asleep. It times both parts of a frame: what GDM handles (the commands that come in, the clock of downloads, queues and the Scheduler), which runs minimized too, and the drawing; never the wait between frames. The watchdog also measures how much processor time the window thread got meanwhile, and the report says what that means: it ran all along (a loop), it waited in a lock or on I/O (a deadlock), or it hardly ran in ordinary code, which is a computer too busy to run GDM or slow to load it from disk, most likely not GDM's bug (those share one signature, freeze while the computer was busy). When the window thread is already back in the event loop by the time the dump is written, the freeze was over before the snapshot, so its stack can't explain it; those reports say so and share the signature freeze over before the snapshot. macOS doesn't measure it yet. The monitor then writes a minidump of every thread from outside, through minidumper and crash-handler. A crashed process never writes its own dump, which is how Firefox, Crashpad and Sentry do it too.
  • 读取转储文件。 监视器使用 Mozilla 的 rust-minidump 读取转储文件。如果找到发布版本的 Breakpad 符号,就会使用这些符号。使用 --features mdm-crash/native-symbols 构建的源码版本也可以读取旁边的原生调试信息(其 .pdb,DWARF);随附的应用不包含该读取器,因为它会占用几 MB。报告的签名(例如 freeze in misterdownloadmanager::winui::combo_edit)在同一问题的多份报告中保持不变,窗口会据此搜索现有问题。
  • 符号。 发布版本保留行号表(debug = "line-tables-only"),但下载文件不包含调试信息。CI 会将其转换为 MisterDownloadManager-<version>-symbols-<platform>.zip(tools/installer/symbols.py,使用 Mozilla 的 dump_syms),并与发布版本的其他文件一同发布。当堆栈中只有裸地址时,报告窗口会获取对应版本的 zip 文件。
  • 来自问题的 .dmp:

cargo run -p mdm-crash --bin mdm-symbolicate -- crash.dmp MisterDownloadManager-<version>-symbols-windows-x64.zip

  • Testing it. cargo test -p mdm-crash runs a real freeze, panic and crash (examples/crashy.rs) and checks each report's signature. To try it in the app, start GDM with MDM_CRASH_TEST=1, then run misterdownloadmanager /show crash-test:freeze (a deadlock; or spin, 12 s of a busy window thread, panic, crash, abort). cargo test -p mdm-app --test freeze_report -- --ignored does that in a copy of the app off the screens, its window visible and minimized.

免费、开源、无广告、无试用版。

Download GolinksPRO Download Manager