স্ট্রেস ব্যবহার করুন

Strace আপনাকে দেখতে সক্ষম করে যে একটি প্রসেস কী কী সিস্টেম কল করে এবং সেই সিস্টেম কলগুলো কী রিটার্ন করে।

স্ট্রেস তৈরি করুন

strace তৈরি করতে, নিম্নলিখিতটি চালান:

mmma -j6 external/strace

একটি চলমান প্রক্রিয়ার সাথে সংযুক্ত হন

strace-এর সবচেয়ে সহজ এবং সাধারণ ব্যবহার হলো এটিকে একটি চলমান প্রসেসের সাথে সংযুক্ত করা, যা আপনি নিম্নলিখিত উপায়ে করতে পারেন:

adb shell strace -f -p PID

-f ফ্ল্যাগটি strace-কে প্রসেসের সমস্ত থ্রেডের সাথে, এবং পরবর্তীতে তৈরি হওয়া যেকোনো নতুন থ্রেডের সাথেও অ্যাটাচ করতে নির্দেশ দেয়।

একটি সাধারণ প্রসেস প্রচুর সিস্টেম কল করে থাকে, তাই শুধুমাত্র আপনার প্রয়োজনীয় ডেটা কীভাবে সংগ্রহ করতে হয় তা জানতে strace ম্যান পেজটি পর্যালোচনা করে দেখতে পারেন।

একটি অ্যাপে ব্যবহার করুন

একটি অ্যাপে strace ব্যবহার করতে:

  1. ডিভাইসটি এমনভাবে সেট আপ করুন যাতে আপনি strace চালাতে পারেন। আপনাকে রুট অ্যাক্সেস নিতে হবে, SELinux নিষ্ক্রিয় করতে হবে এবং রানটাইম রিস্টার্ট করতে হবে যাতে seccomp ফিল্টারটি অপসারিত হয়, যা অন্যথায় strace চলতে বাধা দেবে:
    adb root
    adb shell setenforce 0
    adb shell stop
    adb shell start
    
  2. strace লগগুলির জন্য একটি বিশ্বব্যাপী রাইটেবল ডিরেক্টরি তৈরি করুন, কারণ strace অ্যাপটির uid-এর অধীনে চলবে:
    adb shell mkdir -m 777 /data/local/tmp/strace
    
  3. ট্রেস করার প্রক্রিয়াটি বেছে নিন এবং এটি চালু করুন:
    adb shell setprop wrap.com.android.calendar '"logwrapper strace -f -o /data/local/tmp/strace/strace.com.android.calendar.txt"'
    
  4. প্রক্রিয়াটি স্বাভাবিকভাবে চালু করুন।

জাইগোটে ব্যবহার করুন

জাইগোটে 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 জন্য SELinux file_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_CMDLINEandroidboot.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
    
    পরিবর্তনটি করার পর, বুট ইমেজটি বিল্ড ও ফ্ল্যাশ করুন এবং ডিভাইসটি পারমিসিভ মোডে বুট হবে।