diff options
author | Dave Allison <dallison@google.com> | 2014-09-08 16:33:24 -0700 |
---|---|---|
committer | Dave Allison <dallison@google.com> | 2014-09-08 16:33:24 -0700 |
commit | 22382a4774d7e7b34cc28082cbe76e58ce48a44b (patch) | |
tree | 45ebabd4ae48f4e2c37ad733ab9bf2704fb5f9bd /scripts/gdb | |
parent | 0911ea8db7c60a45fdfeb98f1bbf1e09e5d6d7e4 (diff) | |
download | android_development-22382a4774d7e7b34cc28082cbe76e58ce48a44b.tar.gz android_development-22382a4774d7e7b34cc28082cbe76e58ce48a44b.tar.bz2 android_development-22382a4774d7e7b34cc28082cbe76e58ce48a44b.zip |
Add support for debugging ART to the dalvik.gdb script.
This adds two commands:
art-on
art-off
To the gdbclient script for debugging ART-based executables in gdb.
The default is 'art-on'
Bug: 17409881
Change-Id: I90a1aed603e50853a40d5f5ec1c9b168dc17ddc7
Diffstat (limited to 'scripts/gdb')
-rw-r--r-- | scripts/gdb/dalvik.gdb | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/scripts/gdb/dalvik.gdb b/scripts/gdb/dalvik.gdb index cab0951d7..6ee8d1d71 100644 --- a/scripts/gdb/dalvik.gdb +++ b/scripts/gdb/dalvik.gdb @@ -49,3 +49,62 @@ document dbt frame. If omitted r5 will be used as the default (as the case in the interpreter and JIT'ed code). end + +# ART debugging. ART uses SIGSEGV signals for internal purposes. To allow +# gdb to debug programs using ART we need to treat this signal specially. We +# also set a breakpoint in a libart.so function to stop when the program +# hits an unexpected breakpoint +set $art_debug_enabled = 0 +define art-on + if $art_debug_enabled == 0 + # deal with SIGSEGV signals + handle SIGSEGV noprint nostop pass + + # set a breakpoint and record its number + set breakpoint pending on + break art_sigsegv_fault + set $art_bpnum = $bpnum + commands $art_bpnum + silent + printf "Caught SIGSEGV in user program\n" + end + set breakpoint pending auto + + printf "ART debugging mode is enabled.\n" + set $art_debug_enabled = 1 + else + printf "ART debugging mode is already enabled.\n" + end +end + +document art-on + Enter ART debugging mode. In ART debugging mode, SIGSEGV signals are ignored + by gdb unless they are not handled by ART itself. A breakpoint is + set to stop the program when an unexpected SIGSEGV signal is + encountered. + + To switch ART debugging mode off, use "art-off" +end + +define art-off + if $art_debug_enabled == 1 + # restore SIGSEGV to its default + handle SIGSEGV print stop pass + + # delete our breakpoint + delete $art_bpnum + + set $art_debug_enabled = 0 + printf "ART debugging mode is disabled.\n" + end +end + +document art-off + Leave ART debugging mode. Signal handling is restored to default settings. + + Use the command "art-on" to enable ART debugging mode. +end + +# switch on ART debugging +art-on + |