Step 1

If you see a native crash in the bugreport and the PC/LR are pointing to the
code cache address range*, copy them into codePC and codeLR in gdbjithelper.c,
respectively.

*Caveats: debuggerd doesn't know the range of code cache. So apply this tool if
the crashing address is not contained by any shared library.

       #00  pc 463ba204
       #01  lr 463ba1c9  <unknown>

code around pc:
463ba1e4 4300e119 4284aa7a f927f7b7 40112268
463ba1f4 419da7f8 00002000 01000100 00080000
463ba204 4191debc 01010000 4284aa74 68b00054
463ba214 045cf205 cc016468 0718f2a5 d0102800
463ba224 4c13c701 a20aa108 efb0f775 e008e010

code around lr:
463ba1a8 42e19e58 f2050050 cc01045c 0718f2a5
463ba1b8 d00f2800 4c13c701 a20aa108 efe4f775
463ba1c8 e007e010 29006bf8 6e77dc01 a10347b8
463ba1d8 ef60f775 6db1480b 1c2d4788 4300e119
463ba1e8 4284aa7a f927f7b7 40112268 419da7f8


Step 2

Push $OUT/EXECUTABLES/gdbjithelper_intermediates/LINKED/gdbjithelper to
/system/bin on the device or emulator


Step 3

Debug the executable as usual:

adb forward tcp:5039 tcp:5039
adb shell gdbserver :5039 /system/bin/gdbjithelper &
arm-eabi-gdb $OUT/symbols/system/bin/gdbjithelper
(gdb) tar r :5039
Remote debugging using :5039
Remote debugging from host 127.0.0.1
gdb: Unable to get location for thread creation breakpoint: requested event is not supported
__dl__start () at bionic/linker/arch/arm/begin.S:35
35      mov r0, sp
gdb: Unable to get location for thread creation breakpoint: requested event is not supported
Current language:  auto; currently asm
(gdb) c
Continuing.
[New Thread 596]
codePC[0]: 0x4300e119
codePC[1]: 0x4284aa7a
         :


Step 4

Hit ctrl-C

Issue the following command to see code around PC
x /20i (char *) &codePC+1

Issue the following command to see code around LR
x /20i (char *) &codeLR+1