android-tombstone-symbolication

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

1|Updated Jun 1, 2026
One-click install
npx skills add https://github.com/D1ssolve/craft-agents --skill android-tombstone-symbolication-d1ssolve
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: android-tombstone-symbolication
Source: https://github.com/D1ssolve/craft-agents/tree/main/skills/android-tombstone-symbolication
Command: npx skills add https://github.com/D1ssolve/craft-agents --skill android-tombstone-symbolication-d1ssolve

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 symbol resolution. ## Core Features & Use Cases - Automated Tombstone Parsing: Extracts frame numbers, PC offsets, library names, and BuildIds from tombstone files or logcat output, handling mangled formats and missing headers. - 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, NuGet cache, and NuGet.org to identify the exact .NET runtime version and source commit. - Use Case: You receive a tombstone from a production MAUI app showing a SIGSEGV in libmonosgen-2.0.so. Run the Symbolicate-Tombstone.ps1 script to resolve every .NET frame to functions like ves_icall_System_Environment_FailFast with exact source lines in the dotnet/runtime repository. ## Quick Start Symbolicate the .NET frames in my Android tombstone file tombstone_01.txt using the Symbolicate-Tombstone.ps1 script and show the resolved backtrace.

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 app crash?

Extract the PC offsets and BuildIds from the tombstone backtrace, download debug symbols from the Microsoft symbol server using the BuildId URL pattern, then run llvm-symbolizer against the downloaded .debug file. The included Symbolicate-Tombstone.ps1 script automates this entire workflow.

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 --find llvm-symbolizer on macOS. Use LLVM 14 or newer for best DWARF compatibility.

Why does my tombstone have no BuildIds in the backtrace?

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 with adb shell cat /data/tombstones/tombstone_XX always includes BuildIds.

Does this work for NativeAOT Android apps?

Partially. NativeAOT statically links the runtime into the app binary, so there is no libcoreclr.so or libmonosgen-2.0.so to symbolicate via the symbol server. The libSystem.*.so BCL libraries still resolve through the symbol server, but the app binary needs its own debug symbols.

When should I not use tombstone symbolication for a .NET Android crash?

Skip it for managed .NET exceptions already visible in logcat with a managed stack trace, pure Java or Kotlin crashes, crashes in non-.NET libraries like libart.so, and iOS crash logs, which use a different format.

What if the Microsoft symbol server returns 404 for my BuildId?

A 404 means symbols were not published for that build, common with pre-release or internal builds. Check for local unstripped .so or .so.dbg files in build artifacts or the NuGet runtime pack. The script tries each BuildId once, then reports unsymbolicated frames.