स्ट्रेस आपको यह देखने में सक्षम बनाता है कि एक प्रक्रिया किस सिस्टम कॉल को करती है और वे सिस्टम कॉल क्या लौटाते हैं।
बिल्डिंग स्ट्रेस
स्ट्रेस बनाने के लिए, निम्नलिखित चलाएँ:
mmma -j6 external/strace
चल रही प्रक्रिया से जुड़ना
स्ट्रेस के लिए सबसे सरल और सबसे आम उपयोग का मामला इसे एक चल रही प्रक्रिया से जोड़ना है, जिसे आप इसके साथ कर सकते हैं:
adb shell strace -f -p PID
-f
ध्वज स्ट्रेस को प्रक्रिया में सभी थ्रेड्स के साथ-साथ बाद में उत्पन्न होने वाले किसी भी नए थ्रेड से जुड़ने के लिए कहता है।
एक सामान्य प्रक्रिया बहुत सारे सिस्टम कॉल करती है, इसलिए आप यह जानने के लिए स्ट्रेस मैन पेज की समीक्षा करना चाहेंगे कि केवल उस डेटा को कैसे एकत्र किया जाए जिसमें आप वास्तव में रुचि रखते हैं।
किसी एप्लिकेशन पर उपयोग करना
किसी एप्लिकेशन पर स्ट्रेस का उपयोग करने के लिए:
- डिवाइस सेट करें ताकि आप स्ट्रेस चला सकें। आपको रूट होने की आवश्यकता है, SELinux को अक्षम करें, और seccomp फ़िल्टर को हटाने के लिए रनटाइम को पुनरारंभ करें जो अन्यथा स्ट्रेस को चलने से रोक देगा:
adb root
adb shell setenforce 0
adb shell stop
adb shell start
- स्ट्रेस लॉग के लिए एक विश्व-लेखन योग्य निर्देशिका सेट करें, क्योंकि स्ट्रेस ऐप के यूआईडी के तहत चलेगा:
adb shell mkdir -m 777 /data/local/tmp/strace
- इसे ट्रेस करने और लॉन्च करने की प्रक्रिया चुनें:
adb shell setprop wrap.com.android.calendar '"logwrapper strace -f -o /data/local/tmp/strace/strace.com.android.calendar.txt"'
- प्रक्रिया को सामान्य रूप से लॉन्च करें.
युग्मनज पर प्रयोग
जाइगोट पर स्ट्रेस का उपयोग करने के लिए, प्रासंगिक init.rc
जाइगोट लाइन को ठीक करें ( adb shell setenforce 0
की आवश्यकता है):
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/bin/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
एंड्रॉइड बूट के दौरान स्ट्रेस लॉग प्राप्त करना
एंड्रॉइड बूट के दौरान स्ट्रेस लॉग प्राप्त करने के लिए, निम्नलिखित परिवर्तन करें:
- चूंकि प्रक्रिया का नाम
zygote
सेstrace
में बदल जाता है, इसलिएstrace
के लिए SELinuxfile_context
गुम होने के कारण दी गई सेवा प्रारंभ होने में विफल हो सकती है। समाधान यह है किsystem/sepolicy/private/file_contexts
में स्ट्रेस के लिए एक नई लाइन जोड़ी जाए और मूल फ़ाइल संदर्भ को कॉपी किया जाए। उदाहरण:/dev/socket/zygote u:object_r:zygote_socket:s0 + /system/bin/strace u:object_r:zygote_socket:s0
- कर्नेल या बूटकॉन्फ़िग पैरामीटर जोड़ें, फिर डिवाइस को SELinux अनुमेय मोड में बूट करें। आप इसे
androidboot.selinux=permissive
कोBOARD_KERNEL_CMDLINE
, याBOARD_BOOTCONFIG
में Android 12 में कर्नेल संस्करण 5.10 या इससे अधिक के साथ जोड़कर कर सकते हैं। (यह वेरिएबलbuild/core/Makefile
में केवल पढ़ने के लिए बन जाता है लेकिन हमेशा/device/*/BoardConfig
के अंतर्गत उपलब्ध होता है।)
/device/google/marlin/sailfish/BoardConfig.mk
में पिक्सेल (सेलफ़िश) डिवाइस के लिए उदाहरण:- BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... +BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... androidboot.selinux=permissive
परिवर्तन करने के बाद, बूट छवि बनाएं और फ्लैश करें और डिवाइस अनुमेय मोड में बूट हो जाएगा।