যখন কোনো Mac ফাইল ওয়াচার এডিটগুলো শনাক্ত করতে ব্যর্থ হয়, তখন প্রথমে নির্ধারণ করুন পরিবর্তনটি নজরদারিতে থাকা ফোল্ডারে পৌঁছাচ্ছে কিনা, অ্যাপ্লিকেশনটি ফাইলসিস্টেম ইভেন্টগুলো দেখতে পাচ্ছে কিনা এবং এটি সেগুলোকে ফিল্টার করছে নাকি প্রক্রিয়াকরণ করতে ব্যর্থ হচ্ছে। একটি ছোট, পরিচিত ফাইলে মিস হওয়া একটি পরিবর্তন পুনরুৎপাদন করুন, তারপর সেই ফলাফলটি বড় প্রোজেক্টের একটি ফাইলের সাথে তুলনা করুন। এই ক্রমটি প্রোজেক্ট কনফিগারেশনকে ইভেন্ট ডেলিভারি এবং অ্যাপ্লিকেশন প্রসেসিং থেকে আলাদা করতে সাহায্য করে।
১. সঠিক পাথ এবং পরিবর্তন নিশ্চিত করুন
সমস্যাযুক্ত অ্যাপটিতে, ওয়ার্কস্পেস হিসেবে কোন ফোল্ডারটি খোলা আছে তা পরীক্ষা করুন এবং নিশ্চিত করুন যে সম্পাদিত ফাইলটি সেই ফোল্ডারের ভেতরে রয়েছে। নজরদারিতে থাকা রুটের বাইরে থাকা সত্ত্বেও একটি ফাইল এডিটরে দৃশ্যমান হতে পারে; সিম্বলিক লিংকগুলোও সাধারণ নেস্টেড ফোল্ডারের চেয়ে ভিন্ন আচরণ করতে পারে। উদাহরণস্বরূপ, VS Code উল্লেখ করে যে এর macOS ওয়াচার FSEvents ব্যবহার করে, সিম্বলিক লিংকগুলো স্বয়ংক্রিয়ভাবে অনুসরণ করা হয় না এবং এর ওয়াচার এক্সক্লুশন সেটিংস পাথগুলোকে বাদ দিতে পারে। এই বিবরণগুলো VS Code-এর জন্য প্রযোজ্য, প্রতিটি Mac অ্যাপের জন্য নয়, তাই আপনার নিজস্ব টুলে সমতুল্য ওয়ার্কস্পেস এবং এক্সক্লুশন সেটিংস পরীক্ষা করুন। VS Code: File Watcher Issues
সরাসরি প্রোজেক্টের ভেতরের একটি ফাইলে সাধারণ একটি এডিট সংরক্ষণ করুন, তারপর অ্যাপ্লিকেশনটি প্রতিক্রিয়া জানায় কিনা তা পরীক্ষা করুন। যদি কেবল একটি জেনারেট করা, উপেক্ষিত, লিঙ্কযুক্ত বা গভীরভাবে নেস্টেড পাথ ব্যর্থ হয়, তবে এটিকে সম্পূর্ণ macOS-এর সমস্যা হিসেবে বিবেচনা করার আগে সেই পাথের অন্তর্ভুক্তি এবং ওয়ার্কস্পেস-রুট সম্পর্কটি খতিয়ে দেখুন। প্রোজেক্টটি যদি কোনো ম্যাপ করা নেটওয়ার্ক ড্রাইভে থাকে বা কোনো থার্ড-পার্টি ফাইলসিস্টেম ব্যবহার করে, তবে Mac-এর লোকাল ডিস্কে একটি কপি পরীক্ষা করে দেখুন। VS Code সতর্ক করে যে এই ফাইলসিস্টেমগুলো ইভেন্ট তৈরি করার নিশ্চয়তা দেয় না; এটি পরিবেশগুলোর মধ্যে তুলনা করার একটি কারণ, এমন নয় যে প্রতিটি ভলিউমই ব্যর্থ হবে।
২. অ্যাপ্লিকেশনটি ইভেন্ট পেয়েছে কিনা তা পরীক্ষা করুন
ফাইল-সিস্টেম নোটিফিকেশন প্রতিটি পৃথক এডিটের জন্য একটি সুনির্দিষ্ট কলব্যাকের নিশ্চয়তা দেয় না। Apple-এর FSEvents নথিপত্র অনুসারে ইভেন্টগুলো একত্রিত (coalesce) হতে পারে; যখন MustScanSubDirs ফ্ল্যাগ সেট করা থাকে, তখন ক্লায়েন্টকে নির্দেশিত ডিরেক্টরিটি রিকার্সিভভাবে পুনরায় স্ক্যান করতে হবে। ড্রপড-ইভেন্ট ফ্ল্যাগগুলো বাফারিং সমস্যা নির্দেশ করে এবং নজরদারিতে থাকা ডিরেক্টরিগুলোর একটি সম্পূর্ণ স্ক্যানের প্রয়োজন হয়। এর মানে হলো একটি সঠিকভাবে কার্যক্ষম ওয়াচারকে নোটিফিকেশনের নিখুঁত সিকোয়েন্সের ওপর নির্ভর না করে ডিরেক্টরির বর্তমান বিষয়বস্তুর সাথে সমন্বয় করতে হবে। Apple: Using the File System Events API, Apple: FSEventStreamEventFlags
যে অ্যাপ্লিকেশনটি পরিবর্তন মিস করছে সেটিতে ওয়াচার লগ বা ডায়াগনস্টিকস খুঁজুন। VS Code-এর ক্ষেত্রে, এর ডকুমেন্টেশনে বিস্তারিত ফাইল-ওয়াচার লগিং সক্রিয় করা এবং প্রাসঙ্গিক লগ আউটপুট পরীক্ষা করার নিয়ম উল্লেখ রয়েছে। অন্যান্য অ্যাপে ভিন্ন ডায়াগনস্টিকস থাকতে পারে অথবা আদৌ কোনো ডায়াগনস্টিকস নাও থাকতে পারে। লগ যদি ড্রপড ইভেন্ট, এক্সক্লুশন, একটি অকার্যকর রুট বা ওয়াচার ত্রুটির কথা জানায়, তবে সেই বার্তাটি সংরক্ষণ করুন এবং অ্যাপটির নিজস্ব সমাধান ধাপগুলো অনুসরণ করুন; ওয়াচার বা অ্যাপ রিস্টার্ট করা একটি কার্যকর নিয়ন্ত্রিত তুলনা হতে পারে, তবে এটি নিজে থেকেই মূল কারণ শনাক্ত করে না।
৩. ফাইলসিস্টেম কার্যকলাপ পরীক্ষা করতে fs_usage ব্যবহার করুন
macOS-এ fs_usage অন্তর্ভুক্ত রয়েছে, যা চলমান ফাইলসিস্টেম-সম্পর্কিত সিস্টেম-কল কার্যকলাপ প্রদর্শন করে। একটি সমস্যা পুনরুৎপাদনের সময় প্রাসঙ্গিক অ্যাপ্লিকেশনটি ফাইলগুলোকে অ্যাক্সেস বা পরিবর্তন করছে কিনা তা নিশ্চিত করতে এটি সহায়তা করতে পারে, তবে এটি কোনো FSEvents ইভেন্ট ভিউয়ার নয় এবং ওয়াচার নোটিফিকেশনটি পেয়েছে বা প্রসেস করেছে কিনা তা প্রমাণ করতে পারে না। Apple উল্লেখ করে যে এতে অ্যাক্সেস কন্ট্রোল প্রযোজ্য এবং রুট অ্যাক্সেসের প্রয়োজন হতে পারে। Apple: Examining File-System Usage
টার্মিনালে নির্দিষ্ট অ্যাপ্লিকেশনটি পর্যবেক্ষণ করার সাথে সাথে সমস্যাটি পুনরায় তৈরি করুন। YourApp-এর জায়গায় এর আসল প্রসেস নামটি বসান (উদাহরণস্বরূপ, একটি অ্যাপের প্রসেস নাম তার ডিসপ্লে নাম থেকে ভিন্ন হতে পারে):
sudo fs_usage -w YourApp
সংক্ষিপ্ত পুনরুৎপাদনের পর Control-C চেপে লাইভ ডিসপ্লে বন্ধ করুন। আউটপুটটি অত্যন্ত ব্যস্ত হতে পারে, তাই সম্পাদনার সময় এবং প্রাসঙ্গিক পাথগুলোর ওপর মনোযোগ দিন। যদি প্রসেস নাম নিশ্চিত না হয়, তবে অ্যাপ্লিকেশনের ডকুমেন্টেশন বা অ্যাক্টিভিটি মনিটর দেখুন; আন্দাজ করা নাম দিয়ে ফিল্টার করলে সঠিক প্রসেসটি প্রদর্শিত হবে এমনটি ধরে নেবেন না। fs_usage হলো ফাইল কার্যকলাপের জন্য একটি ডায়াগনস্টিক সহায়ক, কোনো ওয়াচার রিসেট বা মেরামত করার কমান্ড নয়।
৪. পরিধি এবং অ্যাক্সেসের শর্তাবলি তুলনা করুন
অ্যাপটি নজরদারি করতে পারে এমন একটি ছোট লোকাল টেস্ট ফোল্ডারে একই সম্পাদনা পুনরাবৃত্তি করুন। যদি সেটি কাজ করে কিন্তু বড় প্রোজেক্টটি ব্যর্থ হয়, তবে প্রোজেক্ট-নির্দিষ্ট এক্সক্লুশন, সিমলিংক, জেনারেট করা ডিরেক্টরি এবং যেকোনো রিমোট বা প্রোভাইডার-ব্যাকড পাথ তুলনা করুন। বড় ট্রি ইভেন্ট পরিচালনা এবং পুনরায় স্ক্যান করা উভয় ক্ষেত্রেই বেশি কাজের সৃষ্টি করে; Apple-এর নির্দেশনায় স্পষ্ট করা হয়েছে যে নোটিফিকেশনের জন্য রিকার্সিভ স্ক্যানের প্রয়োজন হতে পারে, যেখানে অ্যাপ্লিকেশন সিদ্ধান্ত নেয় যে সেই কাজ কীভাবে পরিচালনা করা হবে। আকারের এই পারস্পরিক সম্পর্ক একা কোনো অপারেটিং-সিস্টেম ইভেন্ট-কিউ সীমা প্রমাণ করে না।
আক্রান্ত অ্যাপটির প্রোজেক্ট লোকেশনে অ্যাক্সেস আছে কিনা তা পরীক্ষা করুন। macOS প্রাইভেসি কন্ট্রোল এবং App Sandbox সংক্রান্ত নিয়মগুলো ফোল্ডারের অ্যাক্সেস সীমাবদ্ধ করতে পারে, এবং Apple নথিপত্রে উল্লেখ রয়েছে যে সুরক্ষিত লোকেশনগুলোর অ্যাক্সেসের জন্য System Settings-এ ব্যবহারকারীর অনুমোদনের প্রয়োজন হতে পারে। System Settings > Privacy & Security-এর অধীনে অ্যাপটির পারমিশন স্ট্যাটাস পর্যালোচনা করুন এবং কেবল কাজের জন্য প্রয়োজনীয় অ্যাক্সেস মঞ্জুর করুন। কোনো পারমিশন সমস্যার কারণে পাথটি অ্যাপে দৃশ্যমান থাকা সত্ত্বেও কার্যকর ফাইল অ্যাক্সেস বাধাগ্রস্ত হতে পারে। Apple: Accessing Files from the macOS App Sandbox
৫. প্রমাণের ওপর ভিত্তি করে পরবর্তী পদক্ষেপ বেছে নিন
যদি ছোট লোকাল ফোল্ডারটি কাজ করে, তবে প্রোজেক্ট লোকেশনের ধরন, ক্ষতিগ্রস্ত পাথের প্যাটার্ন, প্রাসঙ্গিক ওয়াচার লগ এবং কোনো সিমলিংক বা এক্সক্লুশন জড়িত আছে কিনা তা উল্লেখ করে অ্যাপ ডেভেলপারের কাছে একটি মিনিমাল রিপ্রোডাকশন পাঠান। যদি ছোট এবং বড় উভয় লোকাল ফোল্ডারই ব্যর্থ হয়, তবে অ্যাপটি আপডেট করুন এবং এর macOS-সংস্করণ-নির্দিষ্ট ইস্যু ট্র্যাকার বা সাপোর্ট গাইডেন্স দেখুন; macOS সংস্করণ এবং অ্যাপ সংস্করণ উল্লেখ করুন। অনুমাননির্ভর সমাধান হিসেবে প্রোজেক্টের ডেটা মুছে ফেলা বা সিস্টেমের সিকিউরিটি সেটিংস পরিবর্তন করা পরিহার করুন। সবচেয়ে কার্যকর ডায়াগনোসিস হলো সবচেয়ে সংকীর্ণ পুনরুৎপাদনযোগ্য শর্ত: একটি অ্যাপ, একটি পাথ, একটি এডিট এবং একটি পর্যবেক্ষণযোগ্য ত্রুটি।
সূত্র
Using the File System Events API — Apple Developer
FSEventStreamEventFlags — Apple Developer
Examining File-System Usage — Apple Developer
Accessing Files from the macOS App Sandbox — Apple Developer
File Watcher Issues — Microsoft GitHub