strace ব্যবহার করা

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

strace তৈরি করুন

strace তৈরি করতে, নিম্নলিখিতগুলি রান করুন:

mmma -j6 external/strace

চলমান প্রসেসে অ্যাটাচ করুন

strace-এর সবচেয়ে সহজ ও সাধারণ ব্যবহার হল, এটি কোনও চালু প্রসেসের সাথে অ্যাটাচ করা, যা আপনি এইভাবে করতে পারবেন:

adb shell strace -f -p PID

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

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

কোনও অ্যাপে ব্যবহার করুন

কোনও অ্যাপে strace ব্যবহার করতে:

  1. ডিভাইস সেট-আপ করুন যাতে আপনি strace রান করাতে পারেন। আপনাকে রুট হতে হবে, SELinux বন্ধ করতে হবে এবং রানটাইম রিস্টার্ট করতে হবে যাতে সেকম্প ফিল্টার সরানো যায়, তা না হলে 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

Android বুট করার সময় strace লগ পাওয়া

Android বুট করার সময় strace লগ পেতে, নিম্নলিখিত পরিবর্তন করুন:

  • প্রসেসের নাম zygote থেকে strace-এ পরিবর্তিত হওয়ার কারণে, প্রদত্ত পরিষেবাটি শুরু করা নাও যেতে পারে, কারণ strace-এর জন্য file_context SELinux নেই। সমাধান হল system/sepolicy/private/file_contexts-এ strace-এর জন্য নতুন লাইন যোগ করা এবং আসল ফাইলের প্রসঙ্গ কপি করা। উদাহরণ:
    /dev/socket/zygote      u:object_r:zygote_socket:s0
    + /system/bin/strace u:object_r:zygote_socket:s0
    
  • কার্নেল বা bootconfig প্যারামিটার যোগ করুন, তারপর SELinux পারমিসিভ মোডে ডিভাইস বুট করুন। আপনি androidboot.selinux=permissive-এ BOARD_KERNEL_CMDLINE যোগ করে অথবা Android 12-এ BOARD_BOOTCONFIG-এ যোগ করে, কার্নেল ভার্সন 5.10 বা তার পরের যেকোনও ভার্সনের মাধ্যমে এটি করতে পারবেন। (এই ভেরিয়েবল build/core/Makefile-এ রিড-অনলি হয়ে যায়, কিন্তু /device/*/BoardConfig-এ সবসময় উপলভ্য থাকে।)

    /device/google/marlin/sailfish/BoardConfig.mk-এ Pixel (sailfish) ডিভাইসের উদাহরণ:
    - BOARD_KERNEL_CMDLINE := ....  androidboot.hardware=sailfish ...
    +BOARD_KERNEL_CMDLINE := ....  androidboot.hardware=sailfish ...  androidboot.selinux=permissive
    
    পরিবর্তন করার পরে, বুট ইমেজ তৈরি ও ফ্ল্যাশ করুন এবং ডিভাইসটি অনুমতিযোগ্য মোডে বুট করবে।