Mac-এ অ্যাপ ক্র্যাশ সাধারণত খুব কম হয়। কিন্তু যখন হয়, আপনি কারণ ট্রেস করতে চাইতে পারেন। এবং আপনি যদি ডেভেলপার হন, আপনাকে বুঝতে হবে কেন আপনার অ্যাপ ক্র্যাশ করছে। এখানে macOS ক্র্যাশ রিপোর্ট পড়ার এবং গূঢ ভাষা ছানবিন করার উপায় দেওয়া হলো।
ক্র্যাশ রিপোর্ট খোলা
যখন আপনার Mac-এ কোনো অ্যাপ ক্র্যাশ করে, এটি অটোমেটিক্যালি একটি ক্র্যাশ রিপোর্ট জেনারেট করে। ক্র্যাশের পর আপনি এটিকে দেখবেন একটি ওয়ার্নিং ডায়লগের সাথে যা বলে "[App] has quit unexpectedly." সেই উইন্ডোতে "Report ..." বাটনে ক্লিক করলে ক্র্যাশ রিপোর্ট তাত্ক্ষণিক পড়া যাবে। ক্র্যাশ রিপোর্ট Console অ্যাপেও পাওয়া যায়।
- Spotlight-এ "Console" টাইপ করে বা "Application -> Utilities -> Console.app"-এ যেতে Console অ্যাপ্লিকেশন খুলুন।
- বাম মেনুতে "User Reports"-এ ক্লিক করুন, তারপর আপনি যে ক্র্যাশ রিপোর্ট দেখতে চান সেটিতে ক্লিক করুন। এই সব ফাইলের শেষে ".crash" থাকবে এবং টাইটেলে ডেট এবং ক্র্যাশড অ্যাপ্লিকেশন থাকবে। ক্র্যাশ রিপোর্টের ডিটেইলস ডান প্যানে উপলব্ধ।
macOS ক্র্যাশ রিপোর্ট পড়া
ক্র্যাশ রিপোর্টটি উপরের থেকে নিচের দিকে নেভিগেট করি।
কী ক্র্যাশ হয়েছিল?
ক্র্যাশ রিপোর্টের প্রথম অংশ বলে কী "প্রসেস" বা অ্যাপ্লিকেশন ক্র্যাশ করেছিল। সাধারণ ট্রাবলশুটারের জন্য সবচেয়ে গুরুত্বপূর্ণ অংশ হলো প্রসেসের নাম।
Process: aText [11473] Path: /Applications/aText.app/Contents/MacOS/aText Identifier: com.trankynam.aText Version: 2.19 (62) Code Type: X86-64 (Native) Parent Process: ??? [1] Responsible: aText [11473] User ID: 501
কখন ক্র্যাশ হয়েছিল?
দ্বিতীয় অংশ আমাদের বলে ক্র্যাশ কখন হয়েছিল। এছাড়া আপনার সিস্টেম সম্পর্কে কিছু তথ্য দেয়।
Date/Time: 2018-03-15 00:58:10.552 -0400 OS Version: Mac OS X 10.12.6 (16G1036) Report Version: 12 Anonymous UUID: 6C985CFD-6975-3F30-50EB-0713315F5090 Time Awake Since Boot: 630000 seconds System Integrity Protection: enabled
ক্র্যাশের কারণ কী?
পরবর্তী অংশটি সবচেয়ে আলোকিতকারী। অ্যাপ্লিকেশন দ্বারা প্রদত্ত "exception type" আমাদের বলে ক্র্যাশের কারণ কী। লগটি রিপোর্ট করে কোন থ্রেড ক্র্যাশ করেছিল: এই কেসে থ্রেড ০।
Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x000040dedeadbec0 Exception Note: EXC_CORPSE_NOTIFY Termination Signal: Segmentation fault: 11 Termination Reason: Namespace SIGNAL, Code 0xb Terminating Process: exc handler [0]
Apple তাদের টেকনিক্যাল ডকুমেন্টেশন-এ কিছু কমন এক্সসেপশন টাইপ লিস্ট করেছে:
- Bad Memory Access (
EXC_BAD_ACCESS/SIGSEGV/SIGBUS) - প্রোগ্রাম মেমরি ভুলভাবে অথবা ইনভ্যালিড অ্যাড্রেসের সাথে অ্যাক্সেস করার চেষ্টা করে। মেমরি ইস্যু ব্যাখ্যা করার একটি কোড যুক্ত থাকে। - Abnormal Exit (
EXC_CRASH/SIGABRT) - অসামান্য এক্সিট, সাধারণত আনকaught C++ এক্সসেপশন এবংabort()কলের হাতে। - Trace Trap (
EXC_BREAKPOINT/SIGTRAP) - SIGABRT-এর মত, কিন্তু এই এক্সিট আটাচড ডিবাগারকে প্রসেসকে ব্রেকপয়েন্টে ইন্টারাপ্ট করে এবং এরর ট্রেস করার সুযোগ দেয়। - Illegal Instruction (
EXC_BAD_INSTRUCTION/SIGILL) - প্রসেস একটি ইনস্ট্রাকশন ইস্যু করেছিল যা বুঝা যেনি বা প্রসেস করা যেনি। - Quit (
SIGQUIT) - প্রসেস অন্য প্রসেস দ্বারা টার্মিনেট হয়েছিল যার পর্যাপ্ত প্রিভিলেজ ছিল। সাধারণত, একটি ওয়াচডগ প্রসেস মিসবিহেভিং প্রসেস টার্মিনেট করে। - Killed (
SIGKILL) - সিস্টেমের অনুরোধে প্রসেস টার্মিনেট হয়েছিল। এক্সপ্লানেশন এর জন্য একটি টার্মিনেশন কোড যুক্ত থাকবে।
আমাদের ক্র্যাশ রিপোর্ট থেকে দেখা যাচ্ছে, অ্যাপ্লিকেশন আনম্যাপড মেমরি অ্যাক্সেস করার চেষ্টা করেছিল। এটি অ্যাপ্লিকেশনের প্রোগ্রামিং এরর বা অনবিধি ইউজার স্টেটের কারণে হয়েছে যা অ্যাপ্লিকেশনকে মেমরি ভুলভাবে ম্যাপ করতে বাধ্য করেছিল।
ক্র্যাশের পূর্বে কী ঘটেছিল?
সেটির পর আমরা দেখি ক্র্যাশ পর্যন্ত যা ঘটেছিল তার একটি রিভার্স ক্রোনোলজিক্যাল লিস্ট। এগুলো থ্রেড অনুযায়ী সর্টেড, থ্রেড ০ থেকে শুরু করে।
এই রিপোর্টে চারটি কলাম আছে। প্রথমটি রিভার্স ক্রোনোলজিক্যাল অর্ডারে ইভেন্টের নম্বর রিপোর্ট করে, ০ থেকে শুরু করে। দ্বিতীয়টি প্রসেসের আইডেন্টিফায়ার। তৃতীয়টি মেমরিতে প্রসেসের অ্যাড্রেস। চতুর্থটি প্রোগ্রামের টাস্কের নাম।
এই "ব্যাকট্রেস" কিছুটা বিভ্রান্তিকর হতে পারে। এটি "সিম্বোলিকেটেড", মানে কিছু মেমরি অ্যাড্রেস ফাংশন নাম বা অ্যাপ্লিকেশন টাস্ক দিয়ে রিপ্লেস করা হয়েছে। কখনো কখনো এটি সম্পূর্ণরূপে করা যায় না, যার ফলে অপাঠযোগ্য মেমরি অ্যাড্রেস রিপোর্টে ছড়িয়ে পড়ে।
আমাদের উপরের ক্র্যাশ রিপোর্টে এটিই দেখাচ্ছে: com.trankynam.aText সিম্বোলিকেটেড নয়। সম্পূর্ণ সিম্বোলিকেশন থাকলেও, ব্যাকট্রেস পড়া কঠিন হতে পারে। কখনো ডেভেলপার ব্যবহারিক নোটস ইনক্লুড করেন অ্যাপ্লিকেশন টাস্ক এবং ইভেন্টের সম্পর্কে। অন্যসময়, এগুলো ক্রিপ্টিক টাইটেল বা নমেরিক কোড। আপনি যদি সিম্বোলিকেশন বুঝতে পারেন, হতে পারে আপনি বুঝতে পারেন কী হচ্ছে। কিন্তু একইভাবে সম্ভব আপনাকে অ্যাপ্লিকেশনটি নিজে কোড করতে হয় ব্যাকট্রেস বুঝতে।
উপসংহার: এটি কতটুকু উপকারী?
আপনি যদি ডেভেলপার হন, ক্র্যাশ রিপোর্ট পড়া অপরিহার্য। এটি আপনাকে বুঝতে সাহায্য করে আপনার অ্যাপ্লিকেশনের কোন অংশ ক্র্যাশ করছে এবং কেন। আপনি যদি ইউজার হন, এগুলো তত উপকারী নয়। কিন্তু আপনার যদি একটি পারসিস্টেন্ট ক্র্যাশ থাকে, ক্র্যাশ রিপোর্টগুলো ইস্যু ট্রাবলশুট করতে বা ডেভেলপারের সাথে কাজ করে সমস্যা ফিক্স করতে সাহায্য করতে পারে। আপনি একটি ইউজফুল এরর কোড পেতে পারেন গুগল করতে বা টেক সাপোর্টের সাথে সঠিক ইনফরমেশন প্রদান করতে। আপনি যদি বিস্তারিত জানতে চান, Apple-এর টেকনিক্যাল নোট অন ক্র্যাশ পড়ুন।