When a native Android app crashes (for example, due to a segmentation fault in C/C++ code), the kernel writes a tombstone file. This file contains the register state, memory map, and a stack trace that can pinpoint the offending library or line of code. Unlike the Java‑level logcat output, a tombstone gives you the low‑level details required to debug native crashes.
Build number seven times.USB debugging.adb binary is part of the Android SDK Platform‑Tools package..so files or an NDK debug symbol file) if you want to translate raw addresses into readable function names.Connect the device via USB and verify the connection:
adb devices
You should see your device listed as device. If it shows unauthorized, accept the RSA prompt on the phone.
Reproduce the crash (or wait for the system to generate a tombstone). After the crash, the device usually shows a “Unfortunately, app has stopped” dialog. Dismiss it; the kernel will have already written the tombstone.
Locate the tombstone directory. Android stores them under /data/tombstones. This path is not readable by normal users, but ADB can access it when root is not required because the shell user has read permission.
adb shell ls -l /data/tombstones
You will see files named tombstone_00, tombstone_01, etc. The most recent one usually has the highest number.
Pull the latest tombstone to your PC. Replace tombstone_XX with the actual file name.
adb pull /data/tombstones/tombstone_XX ./tombstone_XX.txt
The file is now saved in the current directory as tombstone_XX.txt.
Optional: Pull the app’s memory map. The tombstone already includes a maps section, but if you need the exact .so binaries, pull them from /data/app/ (or from your development build output).
The raw tombstone shows hexadecimal addresses. To translate them into readable symbols you need the ndk-stack tool (included in the NDK) or llvm-symbolizer. Both accept the tombstone and a directory containing the matching .so files.
ndk-stack is on your PATH..so libraries:
ndk-stack -sym /path/to/symbols -dump ./tombstone_XX.txt
The output will replace each address with function_name+offset and show the source file if debug info is present.llvm-symbolizer binary (it ships with the NDK as well).#00 pc).echo "0x7f8a1234" | llvm-symbolizer -obj /path/to/libexample.so
Repeat for each address or write a small script to automate it.Typical sections you will see:
SIGSEGV (segmentation fault) or SIGABRT.#00) is where the crash occurred.When you see a native library you recognize (e.g., libexample.so) and a function name, you can trace the problem back to your source code or a third‑party SDK.
.so (stripped), ndk‑stack will show raw addresses only. Keep a copy of the unstripped libraries from your build server for debugging./data/system/dropbox instead of /data/tombstones. If the tombstone directory is empty, check adb shell ls /data/system/dropbox for files like system_app_crash./data/tombstones directory may be inaccessible without the android.permission.READ_LOGS permission, which third‑party apps cannot obtain. ADB’s shell user still has access, but you must use adb root on an engineering build. For production devices, stick to the standard adb pull method shown above.If adb pull returns permission denied or the file is empty, try the following:
adb kill-server && adb start-server.adb shell su -c "cat /data/tombstones/tombstone_XX" only on devices with a rooted user (not required for most).logcat entries.adb shell ls -l /data/tombstones to find the newest tombstone_XX.adb pull /data/tombstones/tombstone_XX ./crash.txt.ndk-stack -sym <symbol_dir> -dump ./crash.txt.After fixing, repeat the steps to confirm the crash no longer appears.
Do not share raw tombstone files publicly if they contain proprietary code or personal data. They may expose memory contents, including passwords or tokens, that were in RAM at the time of the crash.
If you cannot map the address to a symbol despite having the correct .so files, the crash may be occurring in a system library that you cannot recompile. In that case, consider filing a bug report with the device manufacturer, providing the tombstone and device details (model, Android version, kernel version).
With these steps you can reliably extract, decode, and act on Android tombstone crash dumps without rooting your device, turning opaque native crashes into actionable debugging information.









