Strace আপনাকে কোনও প্রসেস করা সিস্টেম কল এবং সেইসব সিস্টেম কলের রিটার্ন ভ্যালু দেখতে দেয়।
strace তৈরি করুন
strace তৈরি করতে, নিম্নলিখিতগুলি রান করুন:
mmma -j6 external/strace
চলমান প্রসেসে অ্যাটাচ করুন
strace-এর সবচেয়ে সহজ ও সাধারণ ব্যবহার হল, এটি কোনও চালু প্রসেসের সাথে অ্যাটাচ করা, যা আপনি এইভাবে করতে পারবেন:
adb shell strace -f -p PID
-f ফ্ল্যাগ strace-কে বলে যে প্রসেসের মধ্যে থাকা সব থ্রেড এবং পরে তৈরি হওয়া
নতুন থ্রেডের সাথে অ্যাটাচ হতে হবে।
একটি সাধারণ প্রসেস অনেক সিস্টেম কল করে, তাই আপনি আসলে যে ডেটা সংগ্রহ করতে আগ্রহী, শুধুমাত্র সেটি কীভাবে সংগ্রহ করবেন তা জানতে আপনাকে strace man page পর্যালোচনা করতে হবে।
কোনও অ্যাপে ব্যবহার করুন
কোনও অ্যাপে strace ব্যবহার করতে:
- ডিভাইস সেট-আপ করুন যাতে আপনি strace রান করাতে পারেন। আপনাকে রুট হতে হবে, SELinux বন্ধ করতে হবে এবং
রানটাইম রিস্টার্ট করতে হবে যাতে সেকম্প ফিল্টার সরানো যায়, তা না হলে 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
Android বুট করার সময় strace লগ পাওয়া
Android বুট করার সময় strace লগ পেতে, নিম্নলিখিত পরিবর্তন করুন:
- প্রসেসের নাম
zygoteথেকেstrace-এ পরিবর্তিত হওয়ার কারণে, প্রদত্ত পরিষেবাটি শুরু করা নাও যেতে পারে, কারণstrace-এর জন্যfile_contextSELinux নেই। সমাধান হল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