android-tombstone-symbolication

Symbolicate .NET runtime frames in Android tombstone crash files using BuildIds and llvm-symbolizer.

Updated Jul 12, 2026
One-click install
npx skills add https://github.com/Patrick-Rex/DotNetTechSamples --skill android-tombstone-symbolication-patrick-rex
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: android-tombstone-symbolication
Source: https://github.com/Patrick-Rex/DotNetTechSamples/tree/main/.agents/plugins/dotnet-diag/skills/android-tombstone-symbolication
Command: npx skills add https://github.com/Patrick-Rex/DotNetTechSamples --skill android-tombstone-symbolication-patrick-rex

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) components.

What problem does it solve? When a .NET MAUI, Xamarin, or Mono Android app crashes natively, the tombstone backtrace shows only raw PC offsets in libraries like libmonosgen-2.0.so or libcoreclr.so, making root-cause analysis nearly impossible without resolved function names and source lines. ## Core Features & Use Cases - Automated Tombstone Parsing: Extracts frame numbers, PC offsets, library names, and BuildIds from tombstone files or logcat output, across all threads. - Symbol Download & Resolution: Downloads debug symbols from the Microsoft symbol server by ELF BuildId and runs llvm-symbolizer to produce function names with source file and line numbers. - Runtime Version Identification: Matches BuildIds against local runtime packs and NuGet.org to identify the exact .NET version and source commit. - Use Case: A MAUI app crashes in production with a SIGSEGV in libmonosgen-2.0.so. Run the script on the tombstone to get a symbolicated backtrace pointing to the exact Mono runtime source line, plus the .NET version and commit for filing an issue. ## Quick Start Run the Symbolicate-Tombstone.ps1 script on my tombstone file to resolve the .NET runtime frames into function names and source lines.

Frequently Asked Questions about android-tombstone-symbolication

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I symbolicate an Android tombstone from a .NET MAUI crash?

Run the Symbolicate-Tombstone.ps1 script with the tombstone file path and llvm-symbolizer. It parses backtrace frames, downloads debug symbols from the Microsoft symbol server by BuildId, and resolves each .NET frame to a function name and source line.

How to resolve libmonosgen-2.0.so crash offsets to source lines?

Extract the BuildId and PC offset from the tombstone frame, download the matching .debug file from the Microsoft symbol server using the elf-buildid-sym URL format, then run llvm-symbolizer with the debug file and offset to get the function and source location.

Where do I find llvm-symbolizer for Android crash analysis?

llvm-symbolizer ships with the Android NDK under toolchains/llvm/prebuilt/*/bin/. It is also available via brew install llvm, apt install llvm, or xcrun on macOS. Use LLVM 14 or newer for best DWARF compatibility.

What if the tombstone frames have no BuildId?

Logcat-captured tombstones often omit BuildIds. Recover them via adb shell readelf -n on the device library, CI build artifacts, or the runtime NuGet package. Pulling raw tombstones from /data/tombstones/ always includes BuildIds.

Does this work for NativeAOT Android apps or Java crashes?

NativeAOT statically links the runtime into the app binary, so only libSystem.*.so BCL frames resolve via the symbol server; the app binary needs its own debug symbols. Pure Java/Kotlin crashes and managed exceptions visible in logcat are out of scope.

Why does symbol download return 404 for my crash?

Pre-release or internal .NET builds may not publish symbols to the Microsoft symbol server. Check for local unstripped .so or .so.dbg files in build artifacts or the NuGet runtime pack instead.