Strace আপনাকে দেখতে সক্ষম করে যে একটি প্রসেস কী কী সিস্টেম কল করে এবং সেই সিস্টেম কলগুলো কী রিটার্ন করে।
স্ট্রেস তৈরি করুন
strace তৈরি করতে, নিম্নলিখিতটি চালান:
mmma -j6 external/strace
একটি চলমান প্রক্রিয়ার সাথে সংযুক্ত হন
strace-এর সবচেয়ে সহজ এবং সাধারণ ব্যবহার হলো এটিকে একটি চলমান প্রসেসের সাথে সংযুক্ত করা, যা আপনি নিম্নলিখিত উপায়ে করতে পারেন:
adb shell strace -f -p PID
-f ফ্ল্যাগটি strace-কে প্রসেসের সমস্ত থ্রেডের সাথে, এবং পরবর্তীতে তৈরি হওয়া যেকোনো নতুন থ্রেডের সাথেও অ্যাটাচ করতে নির্দেশ দেয়।
একটি সাধারণ প্রসেস প্রচুর সিস্টেম কল করে থাকে, তাই শুধুমাত্র আপনার প্রয়োজনীয় ডেটা কীভাবে সংগ্রহ করতে হয় তা জানতে strace ম্যান পেজটি পর্যালোচনা করে দেখতে পারেন।
একটি অ্যাপে ব্যবহার করুন
একটি অ্যাপে strace ব্যবহার করতে:
- ডিভাইসটি এমনভাবে সেট আপ করুন যাতে আপনি strace চালাতে পারেন। আপনাকে রুট অ্যাক্সেস নিতে হবে, SELinux নিষ্ক্রিয় করতে হবে এবং রানটাইম রিস্টার্ট করতে হবে যাতে seccomp ফিল্টারটি অপসারিত হয়, যা অন্যথায় strace চলতে বাধা দেবে:
adb rootadb shell setenforce 0adb shell stopadb shell start - strace লগগুলির জন্য একটি বিশ্বব্যাপী রাইটেবল ডিরেক্টরি তৈরি করুন, কারণ strace অ্যাপটির uid-এর অধীনে চলবে:
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"'
- প্রক্রিয়াটি স্বাভাবিকভাবে চালু করুন।
জাইগোটে ব্যবহার করুন
জাইগোটে strace ব্যবহার করতে, 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
অ্যান্ড্রয়েড বুট করার সময় strace লগগুলি পান
অ্যান্ড্রয়েড বুট করার সময় strace লগ পেতে, নিম্নলিখিত পরিবর্তনগুলি করুন:
- যেহেতু প্রসেসের নাম
zygoteথেকেstraceএ পরিবর্তিত হয়,straceজন্য SELinuxfile_contextঅনুপস্থিত থাকার কারণে প্রদত্ত সার্ভিসটি চালু হতে ব্যর্থ হতে পারে। এর সমাধান হলোsystem/sepolicy/private/file_contextsএ strace-এর জন্য একটি নতুন লাইন যোগ করা এবং মূল ফাইল কনটেক্সটটি সেখানে কপি করে দেওয়া। উদাহরণ:/dev/socket/zygote u:object_r:zygote_socket:s0 + /system/bin/strace u:object_r:zygote_socket:s0
- কার্নেল বা বুটকনফিগ প্যারামিটার যোগ করুন, তারপর ডিভাইসটিকে SELinux পারমিসিভ মোডে বুট করুন। আপনি
BOARD_KERNEL_CMDLINEএandroidboot.selinux=permissiveযোগ করে, অথবা কার্নেল ভার্সন 5.10 বা তার বেশি হলে Android 12-এর ক্ষেত্রেBOARD_BOOTCONFIGএ এটি করতে পারেন। (এই ভ্যারিয়েবলটি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