Debug native crashes
If you're struggling to understand a native crash dump or tombstone, Debugging Native Android Platform Code is a good introduction.
For a fuller catalog of common types of crash and how to investigate them, see Diagnosing Native Crashes.
The ndk-stack tool can help symbolize your crashes.
You can debug crashes in Android Studio as described in the general
Debug your app documentation. If you prefer to use the
command-line, ndk-gdb lets you attach either
lldb from your shell.
Debug native memory issues
Address Sanitizer (HWASan/ASan)
These are your best option for debugging memory errors on Android.
If you want to build your own tools, Android's libc also supports intercepting all allocation/free calls that happen during program execution. See the malloc_hooks documentation for usage instructions.
malloc_info functionality is available in Android 6.0 (Marshmallow) and
higher and its XML schema is documented in Bionic's
For CPU profiling of native code, you can use Simpleperf.