diff options
author | Android Partner Docs <noreply@android.com> | 2017-06-06 19:46:10 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-06-06 19:46:10 +0000 |
commit | e5ecdabfcf75d07d42c93ab2b472b8340b674ae7 (patch) | |
tree | bb3bfcccc604e52f790c41ba6e1f57680659f1b0 /en/devices/tech/debug/strace.html | |
parent | 10f2d7f5d7f38bff628c784f953378db4ed31514 (diff) | |
parent | 5bb2fb12897c2c887e0808f9b794557f461b04d3 (diff) | |
download | source.android.com-e5ecdabfcf75d07d42c93ab2b472b8340b674ae7.tar.gz |
Merge "Docs: Changes to source.android.com" am: 9e286c1def am: 4ecfdb8d77 am: a529e1528coreo-dr1-dev
am: 5bb2fb1289
Change-Id: Icd46fae1801b46e3290e8e7974140024f2bbe608
Diffstat (limited to 'en/devices/tech/debug/strace.html')
-rw-r--r-- | en/devices/tech/debug/strace.html | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/en/devices/tech/debug/strace.html b/en/devices/tech/debug/strace.html new file mode 100644 index 00000000..a69a64b4 --- /dev/null +++ b/en/devices/tech/debug/strace.html @@ -0,0 +1,121 @@ +<html devsite> + <head> + <title>Using Strace</title> + <meta name="project_path" value="/_project.yaml" /> + <meta name="book_path" value="/_book.yaml" /> + </head> + <body> + <!-- + Copyright 2017 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<p><a href="https://strace.io">Strace</a> enables you to see the system calls a +process makes and what those system calls return. A typical process makes a lot +of system calls, so you'll want to review the +<a href="http://man7.org/linux/man-pages/man1/strace.1.html">strace man page</a> +to learn how to collect only data you're actually interested in.</p> + +<h2 id=build-strace>Building strace</h2> + +<p>To build strace, run the following: +<pre> +$ mmma -j6 external/strace +</pre> + +<h2 id=attach-strace>Attaching to a running process</h2> + +<p>The simplest and most common use case for strace is to attach it to a running +process, which you can do with:</p> +<pre> +$ adb shell strace -f -p PID +</pre> +<p>The <code>-f</code> flag tells strace to attach to all the threads in the +process, plus any new threads spawned later.</p> + +<h2 id=app-strace>Using on an application</h2> +<p>To use strace on an application:</p> + +<ol> +<li>Set up a directory for strace logs: +<pre> +$ adb shell setenforce 0 +$ adb shell mkdir /data/local/tmp/strace +$ adb shell chmod 777 /data/local/tmp/strace +</pre> +</li> + +<li>Choose the process to trace before launching it: +<pre> +$ adb shell setprop wrap.com.google.android.browser "logwrapper strace -f -o /data/local/tmp/strace/strace.com.google.android.browser.txt" +</pre> +</li> +<li>Launch the process normally.</li> +</ol> + +<h2 id=zygote-systrace>Using on the zygote</h2> +<p>To use strace on the zygote, fix the relevant <code>init.rc</code> zygote +line (requires <code>adb shell setenforce 0</code>): +</p> + +<pre> +$ cd system/core/ +$ patch -p1 <<EOF +--- a/rootdir/init.zygote32.rc ++++ b/rootdir/init.zygote32.rc +@@ -1,4 +1,4 @@ +-service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server ++service zygote /system/xbin/strace -o /data/local/tmp/zygote.strace /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server + class main + socket zygote stream 660 root system + onrestart write /sys/android_power/request_state wake +EOF +</pre> + +<h2 id=get-logs-boot>Getting strace logs during Android boot</h2> + +<p>To get strace logs during Android boot, make the following changes:</p> + +<ul> +<li>Since the process name changes from <code>zygote</code> to +<code>strace</code>, the given service may fail to start due to the missing +SELinux <code>file_context</code> for <code>strace</code>. The solution is to +add a new line for strace in <code>system/sepolicy/private/file_contexts</code> +and copy the original file context over. Example: +<pre> +/dev/socket/zygote u:object_r:zygote_socket:s0 ++ /system/xbin/strace u:object_r:zygote_socket:s0 +</pre> +</li> + +<li>Add kernel command, then boot the device in SELinux permissive mode. You can +do this by adding <code>androidboot.selinux=permissive</code>to +<code>BOARD_KERNEL_CMDLINE</code>. (This variable becomes read-only in +<code>build/core/Makefile</code> but is always available under +<code>/device/*/BoardConfig</code>.) + +<br> +<br>Example for the Pixel (sailfish) device in +<code>/device/google/marlin/sailfish/BoardConfig.mk</code>: +<pre> +- BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... ++BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... androidboot.selinux=permissive +</pre> +After making the change, build and flash the boot image and the device will boot +in permissive mode. +</li> +</ul> + + </body> +</html> |