summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorDave Allison <dallison@google.com>2014-09-09 20:22:25 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-09-09 20:22:26 +0000
commit72e4885cb6152c6bb4e5607d3aa3df2b8ed3a79d (patch)
tree8774578226649cb6ab929e869ee6924b09027e06 /scripts
parentb4ced6163bf7704942314a12a7650589cd4a4fc1 (diff)
parent22382a4774d7e7b34cc28082cbe76e58ce48a44b (diff)
downloadandroid_development-72e4885cb6152c6bb4e5607d3aa3df2b8ed3a79d.tar.gz
android_development-72e4885cb6152c6bb4e5607d3aa3df2b8ed3a79d.tar.bz2
android_development-72e4885cb6152c6bb4e5607d3aa3df2b8ed3a79d.zip
Merge "Add support for debugging ART to the dalvik.gdb script." into lmp-dev
Diffstat (limited to 'scripts')
-rw-r--r--scripts/gdb/dalvik.gdb59
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
+