Breaking Changes
- Change the MSRV version to 1.85 and Rust Edition 2024. (#1028)
- Remove support for symcache version 7 and 8. (#1033)
- Adds variables to functions. (#1025)
SymCacheandSourceLocationno longer implementPartialEqandEq. (#1039)- Remove depth limits from function parsing. (#1065)
- WASM build IDs are now read according to the specification in https://github.com/WebAssembly/tool-conventions/blob/main/BuildId.md. (#1093)
Fixes
- No unwind info on certain dsym files with sparse sections. (#1041)
- Increase inlinee limits. (#1046)
- Patch a potential segfault in the vendored Swift demangler. (#1052)
- Patch potential aborts in the vendored Swift demangler. (#1054, #1059, #1062)
- Do not allocate based on untrusted input in unreal parser. (#1055)
- Ensure unwind sections contain any unwind information. (#1058)
- Only replace the first
*in sourcelink expansion. (#1064) - Remove recursive symcache writer. (#1066)
- Don't panic when seeing a no-entry second level compact page (#1067)
- Add recursion limit to swift
Demangler(#1068) - Preserve _Z mangled itanium prefixes. (#1074)
- Do not undecorate function names from DWARF debug information in PE files. (#1074, #1075)
- Bound output string size. (#1073)
- Don't accept unbounded custom nodes in RuntimeProperties. (#1072)
- Avoid infinite looping in the swift demangler with bad const prop codes. (#1079)
- Guard against empty NodePrinter children in the Swift demanger. (#1078)
- Skip symbols outside the u32 address range in the symcache writer. (#1092)
- Reject malformed symcaches whose ranges section outgrows their source locations section. (#1091)
- Prevent cycles when iterating on inline sourcelocations in symcache. (#1080)
- Don't artificially extend WASM symbol sizes. (#1081)
- Use 2-byte simple indexes for Portable PDB tables with exactly 65,535 rows. (#1085)
Dependencies
- Bump
pdb-addr2lineto 0.12.1 to fix a potential infinite recursion. (#1030) - Bump
js-source-scopesto 0.7.3 to fix name resolution for private functions. (#1057) - Bump
cpp_demangleto 0.5.1. (#1077) - Bump
minidumpto 0.27.0. (#1082)
Features
- Adds variable information to symcaches. (#1036, #1037)
- Implements variables at a frame offset. (#1026)
- Implement resolution for primitive and pointer type references contained in variables. (#1032)
Breaking Changes
SourceBundleWriter::finishnow returns the underlying writer. (#1016)FormatErrorKind::InvalidBlobFormatis changed fromu32toi32. (#1016)EmbeddedSource::get_contents_boundednow replacesEmbeddedSource::get_contents. (#1016)- Removed the deprecated
BreakpadErrorKind::BadSyntaxvariant. (#1024)
Dependencies
- Bump
pdb-addr2lineto 0.12.0. This includes a switch frompdbtopdb2. (#1018)
Fixes
- Handle XML parsing without recursion. (#1003)
- No documented changes.
Fixes
- Add limit on inline nesting depth when parsing Breakpad objects. (#1014)
- Fix potential out of bounds panic on invalid section offsets (#1013)
- Fix a potential panic when locating sections in an elf file. (#1012)
Features
- Add limit on chained
UNWIND_INFOtraversal in CFI generation. (#1007)
Features
- Add recursion limit to vendored msvc-demangler. (#1006)
- Vendor msvc-demangler. (#998)
- WASM: expose
il2cppLineMapping(object, provider), which extracts a Unity Il2cpp C++→C# line mapping by parsingsource_infomarkers from an object's referenced C++ source files and returns it as a JSON document (orundefinedwhen no mappings are found). Source file contents are supplied by a(path) => Uint8Array | nullprovider callback, so it works without filesystem access.symbolic-il2cppalso gainsObjectLineMapping::from_object_with_provider, the filesystem-free counterpart offrom_object. (#1005) - WASM: expose
ObjectFile.asPe()to narrow an object to aPeFile, andPeFile.embeddedPpdb()returning the decompressed Portable PDB embedded in a managed Windows PE (a standalone, parseable debug information file), orundefinedwhen there is no embedded PPDB. (#1004)
Fixes
- Fix bugs in the vendored msvc-demangler lib. (#1008)
Dependencies
- Bump the
memmap2floor to 0.9.11 to exclude versions affected by RUSTSEC-2026-0186. (#996)
Fixes
- Fix function range to addr/line resolution, this fixes a case where WASM binaries compiled with Emscripten failed to have their source code mappings resolved. (#1002)
Features
symbolic-debuginfo: Add a new optionmax_decompressed_embedded_source_sizetoParseObjectOptions. This option limits the sizes of compressed embedded source files when they are returned from methods likesource_by_path. (#999)
Features
- WASM: expose
ObjectFile.debugSession()returning aDebugSessionwithfiles()(the source files referenced by the object) andsourceByPath(path)(resolving embedded contents or a source link).symbolic-debuginfoalso implementsAsSelfforObjectDebugSessionso it can be held in aSelfCell. (#997)
Features
symbolic-debuginfo: addSourceBundleWriter::write_object_with_filter_and_provider, which builds a source bundle from caller-supplied source content instead of relying on the local filesystem. (#988)
Fixes
- Fix issue with overflowing section offsets in 64bit Mach-O files. (#985)
Changes
- Rework WASM API to expose lower level
symbolictypes. (#992) symbolic-debuginfo: use the Czstdlibrary on wasm32 too (via zstd-sys's wasm-shim), replacing theruzstddecoder added in #989. One zstd implementation for all targets;ruzstdis no longer a dependency. Building for wasm now requires clang. (#990)
Changes
symbolic-debuginfo: select the Czstdlibrary (native) vs the pure-Rustruzstddecoder (wasm32) viacfg(target_arch)instead of theelf-zstd/elf-zstd-purefeatures.features = ["elf"]again includes zstd support on native (the feature split in #986 had silently removed it).ruzstdwas bumped to 0.8.3 and now rejects size mismatches instead of truncating. (#989)
Features
- Add WebAssembly bindings (
symbolic-wasmcrate) published to npm as@sentry/symbolic, for parsing debug information files from JavaScript. (#986)
Changes
symbolic-debuginfo: thezstddependency moved out of theelffeature into a newelf-zstdfeature (kept indefault, so default builds are unchanged). Consumers usingdefault-features = falsewithelfshould addelf-zstdto keep decompressing zstd-compressed ELF debug sections, orelf-zstd-purefor a pure-Rust (wasm-compatible) decoder. (#986)
Features
- Add parsing options for object files. (#984)
Features
- Add support for win arm64 PE unwind codes (#978)
Fixes
- Disable
PEimport table parser and be more permissive during parsing. (#964)
Features
- Updated libswift demangle to v6.3.1. (#980)
Features
- Extract srcsrv data from PDB for file mapping by @mujajica and @loewenheim. This includes a bump of the SymCache format to version 9. (#943)
Dependencies
- Update several publicly exposed dependencies:
gimli: 0.32.3 -> 0.33.0goblin: 0.8.0 -> 0.10.5scroll: 0.12.0 -> 0.13.0 (#976)
Internal Changes 🔧
- (js) Allow magic comments to appear anywhere by @Dav1dde in #974
- Downgrade
cpp_demangleversion to 0.4.1. Symbolicator is currently dependent on this. (#972)
Improvements
- sourcemapcache: Bump
js-source-scopesto 0.7.2. This improves name resolution via getsentry/js-source-scopes#35. (#970)
Improvements
- symcache: Change internal representation to enable old versions to remain parseable. (#947)
- feat: Add
Unreal4File::into_bytes. (#967)
Fixes
- Revert "Use goblin permissive PE parse-mode". This change breaks API compatibility and should not have been released in a patch version. (#966)
Improvements
- Enable symbolize and CFI by default in
examples/minidump_stackwalk, and replace their corresponding flags--symbolizeand--cfiwith--no-symbolizeand--no-cfirespectively. (#963)
Fixes
- Use goblin permissive PE parse-mode (#960)
- DWARF: Correctly detect languages in LTO-compiled binaries (#961)
Fixes
- symcache: Fixed an unsound implementation of
Pod(#958)
Fixes
- minidump: Define default .ra rules for PPC and ARM (#949)
- feat(pdb): Extract the srcsrv integration name for metrics (#944)
- feat(elf): Added support for dynamic symbols when DYNAMIC segment is missing. (#935)
- fix(dwarf): -2 is now an allowed tombstone address in some DWARF sections. For details, see gimli-rs/gimli#791. (#937).
Fixes
- sourcemapcache: Tokens are now considered to only extend to the end of the line (as intended). This means that some lookups that would previously (incorrectly) have returned unminified source positions now return nothing. (#932)
Fixes
- symcache: Fixed a bug in symcache generation for functions without line records. (#930)
Features
- python bindings: Expose SourceMapView.get_source_contents function. (#921)
- Change the MSRV version to 1.82. (#927)
- build: switch to Python3.11 for releases builds. (#929)
Fixes
- sourcemapcache: Don't return unmapped source locations. (#922)
Fixes
- demangle: Fixed a crash/abort when providing bad input to the swift demangler. (#917)
Fixes
- symcache: Fixed a bug introduced in 12.14.0 that resulted in symbols not being inserted. (#915)
Features
- Allow specifying multiple symbol sources in minidump-stackwalk utility. (#903)
- Add a subcommand to extract individual files from a unreal crash report to the
unreal_engine_crashutility. (#907)
Fixes
- Do not hallucinate frames when stack walking in minidump-stackwalk utility. (#904)
Improvements
- Add normalization for paths in
FileKey. (#908)
Fixes
- Restore support for older Rust versions and clarify MSRV policy. (#902)
Features
- Expose API to apply access pattern hints to a
ByteView.(#899).
Fixes
- symcache: Explicitly map "holes" between functions (#897)
Fixes
- Parse
debug_str_offssection in Mach-O files (#895)
Improvements
- Check UTF-8 validity memory efficiently (#890)
Fixes
- Fixed GHA-based Windows builds (#891).
Fixes
- Fixed a compilation issue with older GCC compilers. (#886)
Features
- Updated libswift demangle to v6.0.3. (#885)
Fixes
- symcache: Fixed a bug related to to inlinee resolution during symcache conversion. (#883)
Fixes
- js: Prefer
"debug_id"for sourcemap debug IDs. (#878).
Fixes
- js: Fixed an error when reading debug IDs from sourcemaps with
both
"debugId"and"debug_id"keys (#877).
Features
- feat(js): Sourcemap debug IDs can now be read from the
"debugId"field in addition to"debug_id"(#870).
Fixes
- Unship "Support for DWARFv5 embedded source code extension (#849)". Unfortunately the check for whether an elf file contains embedded sources is prohibitively expensive in terms of memory. (#870)
Fixes
- symbolic-cfi: Skip invalid FDEs when converting DWARF to Breakpad CFI (#868)
Internal:
- Removed
dmsortdependency and replaced uses with stable std sorts. (#869)
- Add callback to
symbolic::debuginfo::sourcebundle::SourceBundleWriterwhich handles files skipped while writing to the source bundle. (#864)
- Skip invalid sources (#861)
Features
- Support for DWARFv5 embedded source code extension (#849)
- Updated wasmparser dependency to 0.214.0 (#849)
- Downgrade and pin
zipto fix SourceBundles with >64k files (#846)
Features
- Add support for reading
zstdcompressed ELF debug section (#843)
Fixes
- sourcebundles: Only valid UTF-8 files can be written into sourcebundles (#816)
- Fix an issue when extracting the name of the debug file from a PE object (#825)
Internal
- Update tokio to latest version (#833)
- Fix infinite recursion caused by indirect self-references when resolving function names (#836)
- Switch to workspace dependencies (#841)
Features
- Make mapping by params initialization optional (#823)
Internal
- Update crate dependencies, in particular
gimlito fix performance/OOM problems related to duplicated abbreviations (#822)
Fixes
- Fix empty parameters list issue (#821)
Features
- Add support for
parametersparam in theremap_frameto allow deobfuscation when line is not available (#820)
Internal
- Emit a MODULE record for PE files (#814)
Features
- Update proguard and add
remap_methodfn (#818)
Fixes
- sourcebundles: Don't write empty
source_linksmaps (#813)
Fixes
discover_sourcemaps_locationreturns source mapping URLs without query parameters or fragments (#809)
Internal
- Updated
gimli,goblin,indexmap, andminidumpdependencies (#811) Cargo.lockis now included in the repository (#811)
Features
- Add sourcelink functionality to
symbolic-common(#803) - Add sourcelink support to sourcebundles (#804)
Fixes
- Documentation fixes contributed by fzyzcjy
Features
- Add some mypy typing to symbolic (#797)
Updating
- Require python 3.8+ for python bindings (#793)
Fixes:
- sourcemapcache: Improved scope name resolution. (#786)
Fixes:
- Optimize SourceBundle/DebugSession (#787)
Fixes:
- Correctly resolve
sourceMappingURLreferences for"source"files. - Allow parsing the
DebugIdof a PS4 executable.
Fixes:
- PPDB files report
has_sources() = trueeven when they only contain source links (#774) - Make SourceBundle writer deterministic (#778)
- Increase IL2CPPP source mapping boundary (#776)
Features:
- Skip hidden sequence points when creating PortablePDB cache. (#769)
Features:
- Replace internal usage of
LazyCellbyOnceCelland makeSourceBundleDebugSession:Send,SyncandAsSelf. (#767)
Features:
- Added debug IDs to source bundle JavaScript files and source maps. (#762)
- Add support for embedded debug IDs in minified files (#765)
Breaking changes:
- Change
DebugSession::source_by_path()to return aSourceFileDescriptorcontaining either file content or a URL to fetch it from. (#758,#762) - Change
SourceBundleWriter::write_object_with_filter()filter callback to takeSourceFileDescriptor, allowing to include/exclude embedded sources. (#764,#762)
Fixes:
- Make sure to parse
PortablePdbstreams in the correct order. (#760)
Features:
- Correctly read the
debug_idof Deterministic PE files (#658) - Gracefully handle invalid PPDBs (#751)
- Support embedded PortablePDB in DLLs (#752, #757)
Fixes:
- Discard invalid line records and inlinees when parsing functions. (#747)
Features:
PortablePdbDebugSessionnow returns files referenced in the Portable PDB file. (#729)PortablePdbDebugSessionnow returns source files embedded in the Portable PDB file. (#734)- Implement
symbolic_common::AsSelffor SourceMapCache(#742) - Debug information can now be retrieved from PE's with DWARF debug info. (#744)
Breaking changes:
- Demangling functionality is removed from C and Python bindings. (#730)
- The fields of
FileInfoand thecompilation_dirfield onFileEntryare now private. (#729) PortablePdbDebugSessionnow has a lifetime parameter. (#729)PeDebugSessionplaceholder has been removed. (#744)
Thank you:
Features, fixes and improvements in this release have been contributed by:
Features:
Features:
- Add inlinee overlap checks in
symbolic-debuginfo. (#718)
Fixed:
- Ensure proper inlinee nesting in
symbolic-debuginfo. (#720) - Split lines in more cases in
symbolic-debuginfo. (#717)
Internal
Internal
- Update
js-source-scopesto0.3.0. (#715)
Internal
- Update
js-source-scopesto0.2.2. (#714)
Internal
- Python/CABI bindings will use a tempfile instead of holding
SourceMapCachein memory. (#711)
Internal
- Updated
goblin,cpp_demangleandwasmparserdependencies. (#709)
Fixed:
- Rebuild C headers for
SourceMapCacheto expose tokenname(#704)
Features:
- Add
nametoSourceMapCacheTokenPython bindings (#703)
Features:
- Added an Object type for Portable PDB files. (#696)
- Version 2 of the sourcemapcache format additionally saves the names of source locations. (#698)
Fixes:
- Fixed a bug in Unreal Engine log parsing by updating the
anylogdependency. (#695)
Features:
- Added a new sub-crate for working with JavaScript SourceMaps:
symbolic-sourcemapcache. (#688) - This new sourcemap handling is also exposed via the symbolic Python bindings.
- The new version 8 of the symcache format saves strings slightly more compactly. Reading of version 7 is still supported. (#670)
symbolic-ppdbincorporated intosymbolic(behind theppdbfeature flag) (#687)
Internal:
- Use the
wattolibrary for de/serialization of symcache and ppdbcache. (#670)
Fixes:
- Be more lenient when eagerly parsing DWARF
Abbreviations. (#685)
Fixes:
- Be stricter about demangling only
_Zprefixed C++ names. (#681) - Work around a pathological case in DWARF processing that could lead to slowness and high memory usage. (#683)
Fixes:
- Correctly resolve the
DW_AT_producerattribute of DWARF files (#676) - Improve _sigtramp workaround and explanation (#662)
- Slightly lower demangling recursion limit (#655)
Fixes:
- Allow underflows in Windows x64 CFI to allow restoring registers from outside of the current stack frame. (#645)
- Rework the SymCache Writer for correctness. (#648)
- Undecorate Windows symbols when writing SymCache. (#649)
- Correctly use the
.debug_addrsection needed for DWARF5. (#652)
Internal:
- Remove outdated and unused il2cpp/usym-related code. (#650)
Thank you:
Features, fixes and improvements in this release have been contributed by:
Features:
- Added a new subcrate for working with Portable PDB files:
symbolic-ppdb(#621) - Added support for breakpad sym files containing
INLINE_ORIGINandINLINErecords. (#605) - Most function names from PDBs will now include function arguments. (#426)
Fixes:
- Improved DWARF handling to create more consistent inlinee and line information. (#607, #633)
- Improved PDB handling to include more symbols and create more consistent inlinee and line information. (#622, #627, #636, #641)
- Fixed a typo in DWARF 5
addrxparsing which caused incorrect address ranges. (#608) - symcache generation now handles more cases of line / inlinee information correctly. (#637)
- Improved arm64 CFI for macOS system libraries by translating UnwindOp::None into trivial CFI. (#619)
- Improved arm64 CFI for macOS _sigtramp by restricting a workaround to x86_64. (#625)
- Improved MIPS CFI by always generating .ra CFI. (#612)
- Fixed il2cpp lookup to discard information for unrelated lines. (#617)
- Leading underscores are no longer stripped from PDB symbols. (#642)
- MSVC demangled functions now look more visually pleasing. (#640)
- Updated wasmparser dependency to 0.85.0. (#624)
Breaking changes:
- Updated the
debugiddependency to 0.8. - Updated the
uuiddependency to 1.0. - Updated the
pdbdependency to 0.8. - Removed the public method
symbolic_common::CpuFamily::cfi_register_name. - The
symbolic-minidumpcrate has been dropped. The CFI functionality that was contained insymbolic-minidumpnow resides in its own crate,symbolic-cfi. - The
symbolic-unwindcrate has been dropped. - The
symbolic-sourcemapcrate has been dropped. Since it was only used insymbolic-cabi, its functionality has been incorporated intosymbolic-cabi. - Support for symcache versions before v7 has been dropped. This entails a number of changes in
the public API of
symbolic-symcache:- Removed support for symcache binary formats prior to v7.
- Removed
SymCacheWriter. - Removed
SymCacheError. - Removed
SymCacheErrorKind. - Removed
Line. - Removed
Lines. - Removed
LineInfo. - Removed
Lookup. - Removed
Function::id. - Removed
Function::parent_id. - Removed
Function::address. - Removed
Function::symbol. - Removed
Function::compilation_dir. - Removed
Function::lines. - Removed
SymCache::has_line_info. - Removed
SymCache::has_file_info. - Changed return type of
Function::nameto string slice. - Changed return type of
SymCache::lookuptoSourceLocations. - Added
Function::name_for_demanglingwith the previous signature and behavior ofFunction::name. - Added
Function::entry_pc. - Added
SymCacheConverter. - Added
Error. - Added
ErrorKind. - Added
File. - Added
Files. - Added
FilesDebug. - Added
FunctionsDebug. - Added
SourceLocation. - Added
SourceLocations. - Added
SymCache::files. - Added lifetime parameter to
Transformers. - Undeprecated
FunctionandFunctions. - Undeprecated
SymCache::functions.
- Some C and Python bindings have been dropped or adjusted. Concretely:
symbolic-cabi::minidumpand the corresponding Python functionality has been removed. The CFI functionality that was contained therein now resides insymbolic-cabi::cfiandsymbolic.cfi, respectively.symbolic-cabi::unrealand the corresponding Python functionality has been removed.symbolic-cabi::symcache::SymbolicLineInfohas been replaced withSymbolicSourceLocation, which has a different interface. Likewise,symbolic.symcache.LineInfohas been replaced withSourceLocation.symbolic-cabi::symcache::symbolic_symcache_has_file_infoandsymbolic_symcache_has_line_infohave been removed, likewise forsymbolic.symcache.SymCache.has_line_infoandhas_file_info.
Features:
- Optionally collect referenced C# file sources when creating a source bundle. (#516)
Fixes:
- Only skip one function when encountering unknown Unwind Codes on Windows x64. (#588)
- Skip over low_pc sentinels instead of erroring. (#590)
Fixes:
- Make CFI generation for Windows x64 more accurate, restoring all possible registers and supporting frame pointer unwinding. (#549)
Fixes:
- Make sure to correctly parse Unreal crash reports with zero-length files (#565)
Fixes:
- Updated wasmparser dependency to
0.83.0(#557) - Updated rust-sourcemap dependency to hopefully speed up sourcemap parsing (#559)
- Match symbol names by exact addresses from symbol table (#510)
- Return a more correct
function_sizewhen dealing with split functions (#522)
Thank you:
Features, fixes and improvements in this release have been contributed by:
Features:
- Added a new SymCache
Transformer, which can be used to apply Function or SourceLocation transformations. (#496) - Turn the breakpad-based minidump processor into an optional feature flag. (#519)
Fixes:
- Fixed CFI
STACK WINrecords being written correctly. (#513) - Do not consider empty files as valid BcSymbolMaps anymore. (#523)
- Fix wasm parsing rejecting valid wasm files with non-default features. (#520)
Thank you:
Features, fixes and improvements in this release have been contributed by:
Fixes:
- Update
goblinwhich received fixes to avoid panics and unreasonable memory allocations based on invalid input. (#503) - Fix wrong instruction addresses of the first frame in ARM and ARM64 minidumps. The addresses were incorrectly incremented by one instruction size. (#504)
- Correctly skip ELF sections with an offset of
0instead of ignoring all following sections. This bug may have lead to missing unwind or debug information. (#505) - Detect unwind information when linking with
gold. (#505)
Features:
- Added a new SymCache binary format which is fundamentally based around instruction addr ranges.
- Add
ElfObject::debug_linkthat allows recovering the debug link from an Elf if present. (#450) - Updated Swift demangler to 5.5.1. (#465)
- Support split functions. (#441)
- Refactor
symbolic-debuginfofeature flags. (#470) - Rewrite wasm parser. (#474)
Fixes:
- Make SourceBundle ordering deterministic. (#489)
- Replace unmaintained dependencies.
- Better guard against invalid input that could lead to unreasonable memory allocations, panics or infinite loops.
Thank you:
Features, fixes and improvements in this release have been contributed by:
Features:
- Add
ByteView::map_file_refconstructor which does not consume theFilepassed to it. (#448)
Fixes:
- Support Unreal Engine 5 crash reporter. (#449)
Features:
- Add
Unreal4Crash::parse_with_limitwhich allows specifying a maximum allocation size when extracting compressed UE4 crash archives. (#447)
Fixes:
- Apply speculative handling of stackless functions only on
amd64when creating CFI caches. (#445)
Features:
- Build and publish binary wheels for
arm64/aarch64on macOS and Linux. (#442)
Fixes:
- Don’t prefix ARM registers with
$for CFI files. (#443)
Thank you:
Features, fixes and improvements in this release have been contributed by:
Fixes:
- Avoid panic when looking for hex suffixes in multibyte character strings in the demangler. (#430)
- Allow processing of ELF files as long as they have valid program and section headers. (#434)
- Expose dynamic symbols in ELF files. (#421)
- Make dsym_parent accept
.framework.dSYM. (#425)
Thank you:
Features, fixes and improvements in this release have been contributed by:
Features:
- Write versioned CFI Cache files. Reading those files is only supported with symbolic versions
>= 8.2.1, so trying to use a CFI Cache file with an older version of symbolic will fail with aCfiErrorKind::BadFileMagicerror.
Fixes:
- Correctly restore callee saves registers when using compact unwind info.
- Correctly map all DWARF information when using BcSymbolMaps.
- Allow processing of PDB files that have broken inlinee file references.
- Skip duplicated DWARF functions which can lead to
inline parent offsetoverflows.
Features:
- Add support for reading versioned CFI Cache files.
Fixes:
- Avoid quadratic slowdown when using compact unwind info on macOS.
Thank you:
Features, fixes and improvements in this release have been contributed by:
Caution:
- Relevant dependencies such as
gimli,goblim, andwasm-related libraries were updated.
Features:
- Support for compact unwind info in MachO files was added, along with special casing of some well known macOS system functions.
- The parser of the Breakpad Format was rewritten.
Bug Fixes:
- All valid
STACK WINrecord types are being parsed correctly. This did add new variants to theBreakpadStackWinRecordTypeenum. Technically a breaking change, but we do not consider the Breakpad Parser types as adhering to strict SemVer rules.
Thank you:
Features, fixes and improvements in this release have been contributed by:
Features:
- Add support for loading BCSymbolMaps into MachObjects to un-obfuscate symbol names in bitcode builds. (#336)
Bug Fixes:
- Handle too many files more gracefully. (#374)
- Parse .pdb files containing modules without symbols. (pdb#102)
Bug Fixes:
- Fix detecting hidden Swift symbols in
MachObject::requires_symbolmap. Additionally, the MachO symbol iterator no longer strips underscores from__hidden#symbols. (#316)
Manylinux2010 has dropped support for Python 2.7. As a result, we're no longer building or testing the Python package with Python 2.7. This and future releases require at least Python 3.6.
Bug Fixes:
- Compute correct line offsets in symcaches with large gaps between line records. (#319)
- Support symcache lookups for public symbols larger than 65k. (#320)
- Fixed bug that caused functions to have a length of
0in symcaches. (#324) - Support
debug_addrindexes in DWARF functions. (#326)
Bug Fixes:
- Support DWARF information from MIPS compilers in
SHT_MIPS_DWARFsections. (#317) - Remove a duplicate dependency to two versions of
walrusfor WASM parsing. (#312)
Bug Fixes:
- Include third-party submodules to allow the Python
sdistto build again. (#310)
Bug Fixes:
- Compute correct debug identifiers when proessing a Minidump from a machine with opposite endianness. This particularly allows to process MIPS minidumps on little-endian hosts. (#281)
- Update the breakpad processor with better stack scanning heuristics. Some false-positive frames are avoided during stack scanning now. (#281)
- Avoid panics when processing UE4 crash logs containing ambiguous local times. (#307)
Breaking Changes:
- Usage of
failurewas removed, and all error types were changed to only implementstd::error::Errorand related traits. symbolic-proguardwas removed in favor of theproguardcrate. Proguard is still supported viasymbolic-cabiand the python API however.- Deprecated APIs have been removed:
InstructionInfo's fields are no longer public.pointer_size,instruction_alignmentandip_register_namehave moved fromArchtoCpuFamily.Arch::register_nameas been moved toCpuFamily::cfi_register_name.Dwarf::raw_dataandDwarf::section_datahave been replaced with theraw_sectionandsectionAPIs.Unreal4ContextRuntimeProperties::misc_primary_cpu_brandis has been removed.
- Deprecated Python APIs have been removed:
CodeModule.idandCodeModule.nameUsedebug_idandcode_file, respectively.
DemangleFormatand public fields ofDemangleOptionshave been removed in favor of builder methods onDemangleOptions.Name::newnow takes both theNameManglingstate, and theLanguageexplicitly.
Features:
Bug Fixes:
- Detect mangled anonymous namespaces in PDB inlinees (#261)
- Fix a panic due to undefined behavior. (#287)
- Skip line program sequences at 0. (#291)
- Prefer DWARF names for Dart functions. (#293)
Changes:
- Add missing unreal data attributes (
EngineDataandGameData). (#257) - Expose binary names for ELF and MachO (#252)
- Mark enums as
non_exhaustive. (#256) - Add method to create Archive from bytes. (#250)
Bug Fixes:
- Fix compilation errors on nightly Rust due to a lifetime mismatch. This is temporarily solved with a statically verified unsafe transmute, which will be replaced in an upcoming breaking change. (#258)
Deprecations:
pointer_size,instruction_alignmentandip_register_namehave moved fromArchtoCpuFamily.Arch::register_nameas been moved toCpuFamily::cfi_register_name.- Field access on
InstructionInfohas been deprecated and replaced with a builder.
Changes:
- More detailed documentation and examples on all types and functions in
symbolic-common. (#246)
Bug Fixes:
CpuFamily::cfi_register_namereturnsNoneinstead ofSome("")for some unknown registers.- Update
cpp_demangleagain after the previous release was yanked. (#247)
Bug Fixes:
- Update the
cpp_demangledependency to fix broken builds after a breaking change. (#244, thanks @o0Ignition0o)
Bug Fixes:
- Update the
proguarddependency to fix line info detection. (#242)
Deprecations:
symbolic-proguardis now deprecated and will be removed in the next major release. Use theproguardcrate directly. The C-bindings and Python interface will remain. (#240)
Python:
- Switch the C-ABI and python to
proguard 4.0.0which supports frame remapping. (#240)
Bug Fixes:
- Fix broken links in docs on
ByteView,SelfCellandAsSelf. (#241)
Bug Fixes:
- Update broken doc comments for
SelfCellanddebuginfo::dwarf(#238) - Fix holes in line records of inline parents in DWARF (#239)
Bug Fixes:
- Fix line information of inline parents in DWARF (#237). Many thanks to @calixteman!
Bug Fixes:
- Skip invalid PE runtime function entries (#230)
- Support demangling of block invocation functions (#229)
- Skip invalid CFI entries instead of erroring out (#232)
- Detect stub DLLs and skip CFI generation (#233)
- Skip functions with unknown unwind codes (#234)
- Update
goblinto fix panics in PE unwinding (#231) - Update
gimlito to supporteh_frameCIE version 3 (#231) - Update
cpp_demangle(#231)
Build Changes:
To build with the demangle feature, a C++14 compiler is now required.
Features:
- Support Swift 5.2 mangling (#208)
- Inline docs from sub-crates (#209)
- Add Path utilities for dSYM structures (#212)
- Updated C++ demangler (#215)
Bug Fixes:
- Do not error in functions iterator on name errors (#201)
- Avoid infinite recursion in DWARF because of self references (#202)
- Do not skip symbols from SHT_NOBIT sections (#207)
- Do not assume sorted DWARF compilation units (#214)
- Skip eliminated functions in linked objects (#216)
- Avoid panics for UTF-8 characters in paths (#217)
- Get CFI info from eh_frame even if err in debug_frame (#218)
- Avoid
TooManyRegisterRuleserrors in CFI (#219) - Calculate correct line record sizes for DWARF (#220)
- Detect all scopes to fix incorrect inlinee hierarchies (#221)
- Patch all parent line records of inlinees in DWARF (#223)
- Fix broken compilation with -Clink-dead-code (#225)
- Return the same instruction address for inlinees in symcaches (#226)
Features:
- Upgrade UUID-related dependencies (#199)
Features:
- Implement
serde::{Deserialize, Serialize}forProcessResult(#188) - Implement
serde::{Deserialize, Serialize}forName(#191) - Update the
gimli,goblinandpdblibraries (#196)
Bug Fixes:
- Do not skip DWARF units with a
DW_AT_low_pcof0(#173) - Search for MachO sections in all segments (#173)
- Fix processing Hermes source maps with non-hermes stack frames (#189)
- Fix decompression of GNU compressed debug sections (
.zdebug_info) (#192)
This release is not available on crates.io
Features:
- Support skipping over files when creating source bundles (#167)
- Support for React Native Hermes source maps (#187)
Bug Fixes:
- Resolved an error in processing DWARF CFI
- Resolved an error reading ELF fiels with stripped
PT_DYNAMICheader - Support for Breakpad functions without names
- Multiple fixes in PDB and PE file processing
- Fix compilation with MSVC (#164)
- Added unmapped MachO object types (#169)
- Proper detection for ELF stripped debug companion files (#170)
- Detect Java class files which share the same magic as MachO files (#172)
- Fix memory leaks in the python binding (#180)
This release is not available on crates.io
New Features:
- A new API to parse Unreal Engine 4 Crash reports (#152).
- Source bundles to resolve source code for stack frames (#154).
- Inline functions for Microsoft PDBs (#160).
- Improved demangling of C++ symbols.
Bug Fixes:
- Resolved unexpected EOF when parsing certain PDBs.
- Restored compatibility with Python 3 (#158).
Common:
- Add
ARM64_32(ILP32 ABI on 64-bit ARM) (#149). - Support architecture names from apple crash reports (#151).
DebugInfo:
- Fix invalid memory addresses for some ELF files (#148).
- Prefer a PDB's age from the DBI stream (#150).
- Do not emit default CFI for the
.raregister (#157).
Minidump:
- Fix a memory leak when processing minidumps (#146).
SymCache:
- Add
is_latest()to symcaches and CFI caches. - Support functions with more than 65k line records (#155).
Common:
- Support MIPS and MIPS64 (#141).
DebugInfo:
- Fix code identifiers for PE files and do not return empty ones (#139, #142).
- Support Breakpad debug identifiers without an age field (#140).
- Add
Archive::is_multito check for multi-architecture archives (#143).
Minidump:
- Add more trait implementations to minidump processor types.
- Process minidumps without thread lists (#144).
- Update the breakpad processor. This allows to stackwalk Unreal Engine 4 minidumps (#145).
- Demangling support for Swift 5.
- Fix a performance regression in 6.1.1
- Expose PDB file names from PE object files.
- Fix incorrect CFI extraction from ELF files.
- Fix broken symcache lookups for certain optimized files.
- Support PDB file and line information.
- Support stack unwind info in PDB files (32-bit).
- Support stack unwind info in PE files (64-bit).
- Fix breakpad CFI generation for functions pushing machine frames.
- Add
normalize_code_idin the Python package and C layer. - Add
ByteView::map_fileto create a memory map directly from a file handle. - Add size attribute to streams returned from Minidumps / UE4 crash reports.
- Normalize code identifiers to lowercase (#133).
- Exposes code identifiers and debug file names for minidumps in Python. Previously, this was only available in the Rust Crate.
ObjectLookupnow supportscode_fileanddebug_idin in Python.
Re-release on crates.io.
This release is broken on crates.io
- Fix Rust features: The
serdefeature activated minidump and unreal unintentionally. This is addressed by providing separate features for modules with serde. See the Readme for more information. - Include breakpad sources in
symbolic-minidump.
This is a complete rewrite of symbolic. The aim of this release is to make the Rust version, the
C-API and the Python package more convenient to use in different scenarios. As a result, there have
been quite a few breaking changes.
Breaking Changes:
ByteViewHandlehas been replaced with the slightly safer typeSelfCell. It allows to create a self-referential pair of an owning object and a derived object.ArchiveandObjectare the new types to interface with debug information. There are also direct types exposed for Breakpad, ELF, MachO, PE and PDB; as well as traits to abstract over them.SymCachehas a cleaner API, and the writing part has been moved toSymCacheWriter.- Some common types have received better names:
ObjectKindis now calledFileFormat.ObjectClassis now calledObjectKind. - Many more small signature changes, such as zero-copy return values or iterators instead of collections.
New Features:
- Initial support for PE and PDB is here. It is not complete yet, and will be expanded over the next releases.
- Symbol tables for ELF are now supported. On the bottom line, this will improve symbolication results on Linux.
- GNU-style compressed debug information (e.g.
.zdebug_info) is now supported. - Support for most of DWARF 5, thanks to the amazing work on the
gimlicrate. - More lenient parsing of Breakpad symbols now handles certain edge cases more gracefully and gives much better error messages.
- More utilities to join or split paths from any platform.
Bug Fixes:
- Fix invalid function name resolution for certain DWARF files.
- Fix errors on DWARF files generated with LTO.
- Fix memory leaks when processing Minidumps from Python.
- Skip STAB symbol entries in MachO files, potentially leading to wrong function names.
- Do not error on "negative" line numbers in Breakpad symbols.
Internal Changes:
- Greatly simplified build process and better documentation for the C library.
- Improved test suite, docs and READMEs. While there can never be enough tests, this is a significant step to improving the overall quality of symbolic.
- Automatic cloning of submodules during the build. This should make it easier to start developing
on
symbolic.