aethersdr / aethersdr/AetherSDR
Package matching Qt and native DLL symbols for Partner Center crash reports
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 221
- Forks
- 117
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 299
Description
Problem
Partner Center is reporting many Windows crash and hang clusters as !unknown, especially failures whose faulting image is a Qt DLL or Qt Windows platform plug-in.
A recent high-value cluster involved window reparenting on Intel GPUs through Qt, but the available stack was not sufficiently symbolicated to identify the Qt function path.
AetherSDR currently puts only build/AetherSDR.pdb into the Store .appxsym. The shipped MSIX also contains Qt DLLs, Qt plug-ins, qtkeychain, FFmpeg, FFTW, and other native libraries, but their matching PDBs are absent. Failures attributed to those images therefore remain !unknown even though the application PDB is present.
Evidence
The published v26.7.2 upload has the expected outer structure:
AetherSDR-26.7.2.0-Windows-x64.msixAetherSDR-26.7.2.0-Windows-x64.appxsym
However, the .appxsym contains only:
AetherSDR.pdb
The current New-AppxSym implementation also accepts and copies a single PdbPath.
Microsoft matches PDBs to EXE/DLL images using the embedded GUID and age, so each symbol file must come from the exact build of the shipped binary. A rebuilt or merely version-matched PDB is insufficient.
References:
- https://learn.microsoft.com/en-us/windows/msix/package/packaging-uwp-apps
- https://learn.microsoft.com/en-us/windows/win32/dxtecharts/debugging-with-symbols
- https://learn.microsoft.com/en-us/partner-center/insights/msix-health-report
- https://doc.qt.io/qt-6.5/get-and-install-qt-cli.html
Proposed work
- Install Qt's matching
debug_infopackage for the exact Qt version/toolchain used by the Windows release build. - Collect PDBs corresponding to the EXE and every deployed DLL/plug-in for which symbols are available.
- Include those PDBs in the single architecture-specific
.appxsym, including at minimum:AetherSDR.pdb- deployed Qt module PDBs such as Core, GUI, Widgets, Network, Multimedia, SerialPort, WebSockets, and SVG
- deployed Qt plug-in PDBs, especially the Windows QPA plug-in (
qwindows.dll) - PDBs for locally built DLLs such as qtkeychain
- Include exact third-party PDBs where the upstream/built artifact provides them.
- Keep PDBs out of the runtime MSIX; they belong in the Store upload's
.appxsym. - Preserve the standalone symbol artifact for local WinDbg analysis.
CI validation
Add a hard pre-submission check that:
- Enumerates the EXE/DLL files in the staged MSIX payload.
- Finds matching PDBs by embedded GUID and age rather than filename alone.
- Fails if an AetherSDR-built binary lacks a matching PDB.
- Reports third-party binaries for which matching symbols are unavailable.
- Verifies that the final
.appxsymcontains every collected PDB. - Verifies the
.msixuploadcontains both the MSIX and symbol archive.
symchk, DUMPBIN /PDBPATH:VERBOSE, or equivalent LLVM tooling can provide the identity checks.
Acceptance criteria
- A Store submission contains matching symbols for AetherSDR, deployed Qt modules, Qt plug-ins, and locally built DLLs.
- CI demonstrates that packaged binary/PDB identities match.
- A controlled failure in an AetherSDR frame resolves to an AetherSDR function.
- A controlled failure routed through a Qt frame resolves to a Qt function rather than
Qt6*.dll!unknownorqwindows.dll!unknown. - Partner Center no longer reports
!unknownsolely because symbols for a packaged binary were omitted. - Documentation explains which dependencies remain unsymbolized and why.
Notes
Symbols will not make every hang actionable: reports containing only OS wait frames, incomplete dumps, or driver-only frames can still lack useful detail. This issue targets the symbol omissions we control.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the current New-AppxSym implementation and how build/AetherSDR.pdb is placed into the .appxsym and .msixupload artifacts. Use symchk, DUMPBIN /PDBPATH:VERBOSE, or equivalent tooling to compare staged MSIX binaries with collected PDB identities. Done means the archive includes matching available symbols, CI validates both artifacts, and documentation records unavailable third-party symbols.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- build-system, ci-cd, devops, release
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100