---
title: "Keep symbols for every build you ship · Agent Wranglers"
url: https://agentwranglers.se/playbook/desktop-apps/crashes-telemetry-and-accessibility/desktop-crash-symbols
id: DSK-41
level: Recommended
updated: 2026-10-27
build: a2a6bdfed830
tokens: 1139
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Keep symbols for every build you ship

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Crashes, telemetry and accessibility](https://agentwranglers.se/playbook/desktop-apps/crashes-telemetry-and-accessibility.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-27.

- ID: DSK-41
- Level: Recommended
- Chapter: [Crashes, telemetry and accessibility](https://agentwranglers.se/playbook/desktop-apps/crashes-telemetry-and-accessibility.md)
- Rule: Turn on a crash reporter in every release build, and store the debug symbols of each shipped binary next to its version. A crash report from any version still in use resolves to function names and lines.
- Check: The release job fails when the symbol upload for any shipped binary fails. A test build crashes on purpose, and its report on the crash server names the function and source line. Symbols exist for every version that sent a report in the last 90 days.
- How: A crash report from a release build holds only memory addresses. Without the symbols of that exact build, nobody can tell which line failed. Windows builds produce PDB files, Mac builds produce dSYM bundles, and Linux builds keep separate debug files. Electron and Chromium-based apps write minidumps through Crashpad. Electron's documentation says you need the symbols for the exact Electron version, platform and architecture that crashed. Electron runs a public symbol server for its own binaries. For your own native modules, generate symbols with a tool such as Breakpad's `dump_syms` and keep them for every release. Upload them from the release job, as [upload symbols for every build](https://agentwranglers.se/playbook/mobile-apps/crashes-and-quality/crash-symbols.md) does for phone apps. Strip personal data from reports before they leave the machine. Let the user turn uploads off, as [send usage data only after the user says yes](https://agentwranglers.se/playbook/desktop-apps/crashes-telemetry-and-accessibility/telemetry-opt-in.md) says.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### JavaScript example

```js
// Electron main process: crash reports go to your server only when the user allowed it
import { app, crashReporter } from 'electron';

crashReporter.start({
  submitURL: 'https://crashes.example.com/ledgerly',
  uploadToServer: settings.get('sendCrashReports') === true,
  globalExtra: { release: app.getVersion() },
});
```

### Python example

```python
# release_symbols.py: keep the symbols of each binary under its version, and fail the release on any error
import subprocess, sys, httpx

version, binaries = sys.argv[1], sys.argv[2:]
for binary in binaries:
    symbols = subprocess.run(["dump_syms", binary], check=True, capture_output=True).stdout
    response = httpx.post("https://crashes.example.com/api/symbols", data={"version": version}, files={"file": symbols}, timeout=60)
    response.raise_for_status()
```

## Sources

- [Electron, crashReporter](https://www.electronjs.org/docs/latest/api/crash-reporter)
- [Electron, Crash reporting](https://www.electronjs.org/docs/latest/tutorial/crash-reporting)
- [Microsoft, Symbol server and symbol stores](https://learn.microsoft.com/en-us/windows/win32/debug/symbol-servers-and-symbol-stores)

## Related rules

- MOB-31 [Upload symbols for every build](https://agentwranglers.se/playbook/mobile-apps/crashes-and-quality/crash-symbols.md) in Mobile apps
- DSK-42 [Send usage data only after the user says yes](https://agentwranglers.se/playbook/desktop-apps/crashes-telemetry-and-accessibility/telemetry-opt-in.md) in Desktop apps and extensions

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/desktop-apps/crashes-telemetry-and-accessibility/desktop-crash-symbols">Agent Wranglers desktop apps and extensions playbook</a>`. In code you write, add a comment next to it with the same link.

- Next: [Send usage data only after the user says yes](https://agentwranglers.se/playbook/desktop-apps/crashes-telemetry-and-accessibility/telemetry-opt-in.md)
- [Crashes, telemetry and accessibility](https://agentwranglers.se/playbook/desktop-apps/crashes-telemetry-and-accessibility.md)
