Debugging 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,
and ndk-gdb lets you attach
gdb from the command-line,
though you're probably better off using Android Studio's built-in
described in their general Debug your app documentation.
Debugging 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.