কেন অনেক ব্যতিক্রম বার্তায় দরকারী বিশদ থাকে না?


220

মনে হচ্ছে এ ব্যাপারে সবাই একমত যে একটি নির্দিষ্ট পরিমাণ ব্যতিক্রম বার্তা প্রয়োজনীয় বিবরণ থাকা উচিত

সিস্টেমের উপাদানগুলি থেকে প্রচলিত সাধারণ ব্যতিক্রমগুলিতে কেন দরকারী বিবরণ থাকে না?

কয়েকটি উদাহরণ:

  • .NET Listসূচক এক্সেস ArgumentOutOfRangeExceptionনেই না আমাকে সূচক মান চেষ্টা করা হয় এবং অবৈধ ছিল বলতে, না এটা আমাকে অনুমতি দেওয়া পরিসীমা বলে।
  • মূলত এমএসভিসি সি ++ স্ট্যান্ডার্ড লাইব্রেরির সমস্ত ব্যতিক্রম বার্তাগুলি সম্পূর্ণ অকেজো (উপরের মত একই শিরাতে)।
  • .NET- এ ওরাকল ব্যতিক্রম, আপনাকে বলছে (প্যারাফ্রেসড) "টেবিল বা দৃশ্যটি পাওয়া যায় নি", তবে কোনটি নয় ।

সুতরাং, আমার এটা মনে হচ্ছে যে অধিকাংশ অংশ ব্যতিক্রম বার্তাগুলির জন্য না যথেষ্ট বিবরণ ধারণ উপযোগী হতে হবে। আমার প্রত্যাশাগুলি কি বহির্ভূত? আমি কি ব্যতিক্রমগুলি ভুল করে ব্যবহার করছি যা আমি এমনকি এটি লক্ষ্য করেছি? অথবা হয়ত আমার ছাপ ভুল: ব্যতিক্রম অধিকাংশ না আসলে দরকারী বিবরণ প্রদান?


59
এটি লক্ষ করা উচিত যে সুরক্ষা পেশাদারদের পক্ষ থেকে, "ত্রুটি বার্তাগুলিতে সিস্টেমের অভ্যন্তরীণ সম্পর্কে কোনও বিবরণ থাকা উচিত নয়" এটি একটি আঙ্গুলের নিয়ম।
টেলাস্টিন

118
@ টেলাস্টিন: কেবলমাত্র যদি আপনার সিস্টেম আক্রমণকারীদের জন্য উন্মুক্ত থাকে। উদাহরণস্বরূপ, আপনি যদি কোনও ওয়েব সার্ভার চালাচ্ছেন তবে আপনি শেষ-ব্যবহারকারীর নিকট ক্ষতিকারক ত্রুটি বার্তাগুলি সরবরাহ করতে চান তবে আপনি এখনও আপনার শেষে লগ পেতে খুব বিশদ ত্রুটি বার্তাগুলি চান। এবং ক্লায়েন্ট-সাইড সফ্টওয়্যারগুলিতে, যেখানে ব্যবহারকারী কোনও আক্রমণকারী নয়, আপনি অবশ্যই এই ত্রুটি বার্তাগুলি যথাসম্ভব বিশদভাবে দেখতে চান, যাতে কোনও কিছু ভুল হয়ে যায় এবং আপনি যখন একটি বাগ রিপোর্ট প্রেরণ করেন, আপনার সাথে কাজ করার মতো তথ্য রয়েছে সম্ভব হিসাবে, অনেক সময় যে আপনি পান।
ম্যাসন হুইলারের

9
@ সোনমান: এটি ক্লায়েন্ট-সাইড সফ্টওয়্যার হলে ব্যবহারকারীর পক্ষে কী অ্যাক্সেসযোগ্য? মেশিনের মালিক মেশিনটির মালিক এবং যে কোনও কিছু পেতে পারেন।
ম্যাসন হুইলারের


6
আপনার কাছে থাকতে চান এমন কিছু অতিরিক্ত তথ্য সর্বদা থাকে। উদাহরণ হিসাবে আপনি যে বার্তাগুলি দিয়েছেন তা আমি বেশ ভাল বলে খুঁজে পেয়েছি। আপনি তাদের দিয়ে সমস্যাটি ডিবাগ করতে পারেন। "ত্রুটি 0x80001234" (উইন্ডোজ আপডেট দ্বারা অনুপ্রাণিত উদাহরণ) এর চেয়ে অনেক ভাল।
usr ডিরেক্টরির

উত্তর:


204

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

হ্যাঁ, IndexOutOfRangeExceptionসুনির্দিষ্ট সূচকটি থাকা উচিত যা সীমার বাইরে ছিল, পাশাপাশি এটি নিক্ষেপ করার সময় কার্যকর ছিল এমন ব্যাপ্তিও থাকতে হবে এবং .NET রানটাইমের নির্মাতাদের পক্ষে এটি ঘৃণ্য যে এটি তা নয়। হ্যাঁ, ওরাকল এর table or view not foundব্যতিক্রমটিতে সারণীর নাম বা ভিউ থাকা উচিত যা পাওয়া যায় নি, এবং আবারও, যে এটির জন্য দায়ী তার পক্ষে এটি তুচ্ছ নয়।

বড় অংশে, বিভ্রান্তির মূল ধারণাটি থেকে উদ্ভূত হয়েছিল যে ব্যতিক্রমগুলি মানব-পঠনযোগ্য বার্তাগুলি ধারণ করে, যার ফলস্বরূপ ব্যতিক্রমগুলি সম্পর্কে কী বোঝার অভাব থেকে উদ্ভূত হয়, তাই এটি একটি চক্রচক্র।

যেহেতু লোকেরা মনে করে যে ব্যতিক্রমটি একটি মানব-পঠনযোগ্য বার্তা থাকা উচিত, তাই তারা বিশ্বাস করে যে ব্যতিক্রমটি যা কিছু তথ্য বহন করে তা মানব-পঠনযোগ্য বার্তায় ফর্ম্যাট করা উচিত এবং তারপরে তারা সমস্ত মানব-পঠনযোগ্য বার্তা লিখতে বিরক্ত হয়- বিল্ডিং কোড, বা তারা আশঙ্কা করছেন যে এটি করা প্রাইসিং চোখের বার্তাটি দেখতে পাবে বলে তথ্যের অবিশ্বাস্য পরিমাণে প্রকাশ করতে পারে। (অন্যান্য উত্তর দ্বারা উল্লিখিত সুরক্ষা বিষয়গুলি))

তবে বিষয়টির সত্যতা হ'ল তারা এ নিয়ে উদ্বিগ্ন হওয়া উচিত নয় কারণ ব্যতিক্রমটিতে কোনও মানব-পঠনযোগ্য বার্তা থাকা উচিত নয় । ব্যতিক্রমগুলি এমন জিনিস যা কেবল প্রোগ্রামারদের কখনও দেখা উচিত এবং / অথবা এর সাথে ডিল করা উচিত। যদি কোনও ব্যবহারকারীর কাছে ব্যর্থতার তথ্য উপস্থাপনের প্রয়োজন হয় তবে তা খুব উচ্চ স্তরে সম্পন্ন করা উচিত একটি পরিশীলিত পদ্ধতিতে এবং ব্যবহারকারীর ভাষায়, যা পরিসংখ্যানগতভাবে বলতে হয়, এটি ইংরেজী হওয়ার সম্ভাবনা কম।

সুতরাং, আমাদের প্রোগ্রামারদের জন্য, ব্যতিক্রমটির "বার্তা" ব্যতিক্রমের শ্রেণীর নাম এবং ব্যতিক্রমের সাথে সম্পর্কিত অন্যান্য যে কোনও তথ্যই ব্যতিক্রম অবজেক্টের (চূড়ান্ত / পঠনযোগ্য) সদস্য ভেরিয়েবলে অনুলিপি করা উচিত। সাধারণত, এটি প্রতিটি একক ধারণা। এইভাবে, কোনও বার্তা উত্পন্ন করার প্রয়োজন নেই (বা হওয়া উচিত) এবং তাই কোনও দাম্পত্য চোখ এটি দেখতে পারে না।

টমাস ওয়ানস দ্বারা প্রকাশিত উদ্বেগের সমাধানের জন্য নীচে একটি মন্তব্যে:

হ্যাঁ, অবশ্যই, কিছু স্তরে, আপনি ব্যতিক্রম সম্পর্কিত একটি লগ বার্তা তৈরি করবেন । আপনি যা বলছেন তা নিয়ে আপনি ইতিমধ্যে সমস্যাটি দেখেছেন: একদিকে, স্ট্যাক ট্রেস ব্যতীত একটি ব্যতিক্রম লগ বার্তা অকেজো, তবে অন্যদিকে, আপনি ব্যবহারকারীকে পুরো ব্যতিক্রম স্ট্যাকের সন্ধানটি দেখতে দিতে চান না। আবার এখানে আমাদের সমস্যা হ'ল আমাদের দৃষ্টিকোণটি traditionalতিহ্যবাহী অনুশীলনগুলির দ্বারা বদ্ধ হয়। লগ ফাইলগুলি traditionতিহ্যগতভাবে সরল পাঠ্যে ছিল, যা আমাদের শৃঙ্খলা শৈশবকালীন থাকাকালীন ঠিক থাকতে পারে, তবে সম্ভবত আর নয়: যদি কোনও সুরক্ষা উদ্বেগ থাকে তবে লগ ফাইলটি অবশ্যই বাইনারি এবং / অথবা এনক্রিপ্ট হওয়া উচিত।

বাইনারি বা প্লেইন পাঠ্য যাই হোক না কেন, লগ ফাইলটি এমন একটি স্ট্রিম হিসাবে ভাবা উচিত যেখানে অ্যাপ্লিকেশনটি ডিবাগ তথ্যকে ক্রমিক করে তোলে। এই জাতীয় স্ট্রিমটি কেবল প্রোগ্রামারদের চোখের জন্যই হবে এবং কোনও ব্যতিক্রমের জন্য ডিবাগিং তথ্য উত্পন্ন করার কাজটি ব্যতিক্রমটিকে ডিবাগ লগ স্ট্রিমে সিরিয়াল করার মতোই সহজ হওয়া উচিত। এইভাবে, লগটি দেখে আপনি ব্যাতিক্রম শ্রেণীর নাম দেখতে পাবেন, (যা আমি ইতিমধ্যে বলেছি যে সমস্ত ব্যবহারিক উদ্দেশ্যে "বার্তা",) ব্যতিক্রম সদস্যের প্রতিটি পরিবর্তনশীল যা প্রাসঙ্গিক - সমস্ত কিছু বর্ণনা করে- এবং-ব্যবহারিক-তে-অন্তর্ভুক্ত-এ-লগ এবং সম্পূর্ণ স্ট্যাক ট্রেস। একটি মানব-পঠনযোগ্য ব্যতিক্রম বার্তার বিন্যাস কীভাবে এই প্রক্রিয়া থেকে স্পষ্টতই অনুপস্থিত Note

দ্রষ্টব্য

এই বিষয়ে আমার আরও কয়েকটি ধারণার উত্তর পাওয়া যাবে: একটি ভাল ব্যতিক্রম বার্তা কীভাবে লিখবেন

PPS

মনে হচ্ছে যে মানুষের অনেক বাইনারি লগ ফাইল সম্পর্কে আমার পরামর্শ দ্বারা বন্ধ টিক হচ্ছে, তাই আমি আবার উত্তর সংশোধিত এটা এমনকি আরো স্পষ্ট যে আমি এখানে পরামর্শ করছি করতে অনুগ্রহ করে না যে লগ ফাইল উচিত বাইনারি হতে, কিন্তু যে লগ ফাইলটি বাইনারি হতে পারে, যদি প্রয়োজন হয়।


4
আমি নেট নেট ফ্রেমওয়ার্কের কিছু ব্যাতিক্রম শ্রেণীর উপর নজর রেখেছি এবং দেখা গেছে যে এই ধরণের তথ্য প্রোগ্রামে যুক্ত করার জন্য প্রচুর সুযোগ রয়েছে। সুতরাং আমি অনুমান করি যে প্রশ্নটি "তারা কেন করবে না" - এ সমাধান করে। তবে পুরো "মানব-পঠনযোগ্য" জিনিসের জন্য +1।
রবার্ট হার্ভে

7
আমি একমত নই যে ব্যতিক্রমগুলিতে একটি মানব-পঠনযোগ্য উপাদান থাকা উচিত নয়। কিছু স্তরে, আপনি ব্যতিক্রম সম্পর্কিত লগ বার্তা তৈরি করতে চাইতে পারেন। আমি যুক্তি দিয়েছি যে কোনও ব্যবহারকারী-পঠনযোগ্য লগ ফাইলটিতে একটি স্ট্যাক ট্রেস লগইন এমন বাস্তবায়ন বিশদ প্রকাশ করছে যা আপনি প্রকাশ করতে চান না, সুতরাং মানব পাঠযোগ্য বার্তাটি লগ হওয়া উচিত। লগ ফাইলটি উপস্থাপিত করার সময় যা ত্রুটিযুক্ত থাকে, বিকাশকারীদের তাদের ডিবাগিং শুরু করার জন্য একটি সূচনা পয়েন্ট থাকা উচিত এবং ব্যতিক্রমটি ঘটতে বাধ্য করতে সক্ষম হওয়া উচিত। মানব-পঠনযোগ্য উপাদান কার্যকরভাবে প্রয়োগ না দিয়ে যথাযথভাবে বিশদ হওয়া উচিত।
টমাস ওয়েন্স

44
এত প্রোগ্রামার মানুষ না? আমার সহকর্মীদের দিকে
তাকানো এটি

51
আবার, যতক্ষণ না সফ্টওয়্যারটি ক্লায়েন্ট-সাইড থাকে ততক্ষণ ব্যবহারকারীকে পুরো স্ট্যাক ট্রেসটি দেখতে দেওয়াতে কোনও ভুল নেই । প্রতিটি পেশাদার সফ্টওয়্যার প্রকল্প যা আমি কখনও কাজ করেছি এবং বেশিরভাগ অপেশাদারদের মধ্যে একটি লগিং সিস্টেম রয়েছে যা একটি সম্পূর্ণরূপে ত্রুটিযুক্ত ডাম্প তৈরি করতে পারে যখন একটি অবিবাহিত ব্যতিক্রম উত্থাপিত হয়, যার মধ্যে বর্তমানে চলমান সমস্ত থ্রেডের সম্পূর্ণ স্ট্যাক ট্রেস সহ including প্রক্রিয়া। ত্রুটি বার্তাটি আমাদের কাছে ফেরত পাঠাতে যেহেতু এটি প্রয়োজনীয় (কেবল দরকারী নয়, তবে প্রয়োজনীয় ) যেহেতু ব্যবহারকারী তার (ইচ্ছাকৃত, ওহ হরর!) এটি যে কোনও সময় দেখতে চেয়েছিল ! ঐটার সাথে সমস্যা কি?
ম্যাসন হুইলার

13
আমি কেবল বাইনারি- লগ ফাইলগুলির ক্ষেত্রে সম্মত নই । মূলত সিস্টেমডের সাথে আমার অভিজ্ঞতার কারণে। এই লগগুলি দেখার জন্য এটির বিশেষ সরঞ্জামটি বেশ বিভ্রান্তিকর এবং মনে হয় শেক্সপিয়ারের বানরগুলির একটি কমিটি এটির নকশা করেছে। এটি বিবেচনা করুন, কোনও ওয়েব অ্যাপ্লিকেশনটির জন্য, আপনার ব্যতিক্রমটি দেখার জন্য প্রথম ব্যক্তিটি প্রায়শই সিসাদমিন হতে চলেছেন এবং তিনি এটি নির্ধারণ করতে যাচ্ছেন যে এটির কিছু ঠিক করার দরকার আছে (উদাহরণস্বরূপ ডিস্কটি স্থান ছাড়িয়েছে) বা ফিরে যেতে হবে বিকাশকারীদের।
মাইকেল হ্যাম্পটন

46

সিস্টেমের উপাদানগুলি থেকে প্রচলিত সাধারণ ব্যতিক্রমগুলিতে কেন দরকারী বিবরণ থাকে না?

আমার অভিজ্ঞতায়, বেশ কয়েকটি কারণ রয়েছে যে ব্যতিক্রমগুলিতে দরকারী তথ্য থাকে না। আমি প্রত্যাশা করি যে এই ধরণের কারণগুলি সিস্টেমের উপাদানগুলিতেও প্রযোজ্য হবে - তবে আমি নিশ্চিতভাবে জানি না।

  • সুরক্ষা কেন্দ্রিক লোকেরা ব্যতিক্রমগুলি তথ্য ফাঁসের উত্স হিসাবে দেখেন ( উদাহরণস্বরূপ )। যেহেতু ব্যতিক্রমগুলির ডিফল্ট আচরণটি সেই তথ্যটি ব্যবহারকারীর কাছে প্রদর্শন করা হয়, তাই প্রোগ্রামাররা মাঝে মধ্যে সতর্কতার দিক থেকে ভুল করে।
  • সি ++ তে, আমি ক্যাপ ব্লকগুলিতে মেমরি বরাদ্দের বিরুদ্ধে যুক্তি শুনেছি (যেখানে ভাল বার্তাগুলি মিথ্যা করার জন্য অন্তত কিছু প্রসঙ্গ আছে)। এই বরাদ্দটি পরিচালনা করা কঠিন এবং আরও খারাপ, সেখানে মেমরির ব্যতিক্রম ছাড়তে পারে - প্রায়শই আপনার অ্যাপ্লিকেশনটি ক্র্যাশ করে বা মেমরি ফাঁস করে। মেমরি বরাদ্দ না করে সুন্দরভাবে ব্যতিক্রমগুলি ফর্ম্যাট করা শক্ত এবং এই অনুশীলনটি প্রোগ্রামারদের মতো ভাষার মধ্যেই স্থানান্তরিত হতে পারে।
  • তারা জানে না। আমি বোঝাতে চাইছি এমন কিছু পরিস্থিতি রয়েছে যেখানে কোডটির কোনও ধারণা নেই যা ভুল হয়েছে। কোডটি না জানলে - এটি আপনাকে বলতে পারে না।
  • আমি সেই জায়গাগুলিতে কাজ করেছি যেখানে স্থানীয়করণের উদ্বেগগুলি কেবলমাত্র ইংরেজী স্পিকার সমর্থন কর্মীদের দ্বারা পঠিত ব্যাতিক্রমগুলির জন্য - সিস্টেমে কেবল ইংরাজী স্ট্রিংগুলি প্রতিরোধ করতে পারে।
  • কিছু জায়গাগুলি, আমি ব্যতিক্রমগুলি আরও বেশি দৃser়রূপে ব্যবহৃত দেখেছি। উন্নয়নের সময় তারা একটি স্পষ্ট, উচ্চতর বার্তা দেওয়ার জন্য সেখানে রয়েছে যে কিছু করা হয়নি, বা কোনও জায়গায় পরিবর্তন হয়েছে, তবে অন্য জায়গায় নয়। এগুলি প্রায়শই যথেষ্ট অনন্য যে একটি ভাল বার্তা হ'ল নকল প্রচেষ্টা বা কেবল বিভ্রান্তিকর।
  • মানুষ সবচেয়ে বেশি অলস, প্রোগ্রামার বেশি। আমরা সুখী পথের চেয়ে ব্যতিক্রমী পথে খুব কম সময় ব্যয় করি এবং এটি একটি পার্শ্ব প্রতিক্রিয়া।

আমার প্রত্যাশাগুলি কি বহির্ভূত? আমি কি ব্যতিক্রমগুলি ব্যবহার করছি যা আমি এমনকি এটি লক্ষ্য করি?

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


আমি সচেতন এটি এটিকে সি হিসাবে ট্যাগ করা হয়েছে তবে আমার যুক্ত করা উচিত যে আপনার শেষ অনুচ্ছেদটি সমস্ত ভাষার ক্ষেত্রে প্রযোজ্য নয় কারণ কিছু ব্যতিক্রম-ভিত্তিক ত্রুটি পরিচালনা প্রতিবেদনের উপর নির্ভর করতে পারে (সঠিকভাবে বা ভুলভাবে) ily
লিলিয়ান্থাল

1
@ লিলিয়েনথল - যেমন? আমি যে ভাষার সাথে খুব পরিচিত তা নিয়মিতভাবে এই ধরণের জিনিসটি করে না।
টেলাস্টিন

1
আমি মনে করি যে এই উত্তরে অনেকগুলি ভাল সামগ্রী রয়েছে তবে এটি নীচের অংশটি বলা এড়ানো যায় যা "তাদের উচিত avo"
djechlin

3
ধন্যবাদ। আপনার উদ্বেগ ভিত্তিহীন (আমি আশা করি :-)। কিন্তু প্রত্যেক বার আমি একটি অতিরিক্ত মিনিটে ট্র্যাকিং নিচে ব্যয় যে ইউনিট টেস্ট কি ভুল হয়েছে বা অতিরিক্ত সময় ব্যয় কারণ লগ ফাইল তথ্য উদাসীন কোড বিশ্লেষণ, আমি একটি বাচ্চা দ্বারা বিরক্ত নই পরিহার্য কিছু বার্তা :-) এর crappiness
মার্টিন Ba থেকে

@ টেলাস্টিন এসএপির মালিকানাধীন এবিপি-তে ব্যতিক্রমী ক্লাস কনস্ট্রাক্টে একটি বার্তা থাকতে পারে, যা মূলত একটি বিষয় যা ব্যবহারকারীকে ডায়নামিক (বহু-ভাষাগত) বার্তার পাশাপাশি প্রোগ্রামের অবস্থা (সাফল্য, ব্যর্থতা, সতর্কতা) রিপোর্ট করতে থাকে specifically আমি স্বীকার করব যে আমি জানি না যে এই জাতীয় জিনিসটি কতটা ব্যাপক, বা এটি যদি ভাষাগুলিতেও উত্সাহিত করা সম্ভব হত তবে এটির (আফসোসের) প্রচলিত অভ্যাসের অন্তত একটি উপায় আছে।
লিলিয়ানথাল

12

আমার কাছে সি # অভিজ্ঞতা বা বিশেষত সি ++ এর বেশি পরিমাণ নেই, তবে আমি আপনাকে এটি বলতে পারি - বিকাশকারী-লিখিত ব্যতিক্রমগুলি 10 বারের মধ্যে 9 বার আপনি যে কোনও জেনেরিক ব্যতিক্রম, সময়কালের চেয়ে বেশি দরকারী।

আদর্শভাবে হ্যাঁ, একটি সাধারণ ব্যতিক্রম আপনাকে সঠিকভাবে ত্রুটি কেন ঘটেছে তা নির্দেশ করবে এবং আপনি এটিকে সহজেই সমাধান করতে সক্ষম হবেন - তবে বাস্তবে, একাধিক ক্লাসযুক্ত বৃহত অ্যাপ্লিকেশনগুলিতে বিভিন্ন ধরণের ব্যতিক্রম ছড়িয়ে দিতে পারে, বা একই ধরণের ব্যতিক্রম, ত্রুটি ফেরতের জন্য আপনার নিজের আউটপুটটি ডিফল্ট বার্তায় নির্ভর করার চেয়ে বেশি লেখার জন্য এটি সর্বদা মূল্যবান।

এই কিভাবে এটি করা উচিত, কারণ অনেক মানুষ নির্দিষ্ট আছে, কিছু অ্যাপ্লিকেশন না চান একটি ত্রুটির বার্তা যে, তারা নিরাপত্তার কারণে দেখতে ব্যবহারকারী, অথবা তাদের বিভ্রান্তিকর এড়াতে চাই না নিক্ষেপ করা।

পরিবর্তে, আপনার অ্যাপ্লিকেশনটিতে কী ধরণের ত্রুটি নিক্ষেপ করা যেতে পারে সে সম্পর্কে আপনার নকশাটি অনুমান করা উচিত (এবং সর্বদা ত্রুটি থাকবে) এবং সমস্যাটি চিহ্নিত করতে আপনাকে ত্রুটি-ধরা বার্তা লিখুন।

এটি সর্বদা আপনাকে সাহায্য করবে না - কারণ কোন ত্রুটি বার্তাটি কার্যকর হবে তা আপনি সর্বদা অনুমান করতে পারবেন না - তবে দীর্ঘমেয়াদে আপনার নিজের অ্যাপ্লিকেশনটি আরও ভালভাবে বোঝার এটি প্রথম পদক্ষেপ।


7

প্রশ্নটি বিশেষত জিজ্ঞাসা করছে যে "সিস্টেম উপাদানগুলি" (ওরফে স্ট্যান্ডার্ড লাইব্রেরি ক্লাসগুলি) দরকারী বিশদ না রাখার কারণে কেন এতগুলি ব্যতিক্রম করে।

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

তবে, কেন ব্যতিক্রম বিশদ তথ্য পছন্দসই বা গুরুত্বপূর্ণ হতে পারে তা মাথায় রাখতে দুটি মূল বিষয় রয়েছে:

  1. কোনও উপায়ে কোড কল করে কোনও ব্যতিক্রম ব্যবহার করা যেতে পারে: একটি স্ট্যান্ডার্ড লাইব্রেরি কীভাবে ব্যতিক্রমটি ব্যবহৃত হয় তার ক্ষেত্রে সীমাবদ্ধতা রাখতে পারে না। বিশেষত, এটি ব্যবহারকারীর কাছে প্রদর্শিত হতে পারে। সীমা ছাড়িয়ে একটি অ্যারে সূচক বিবেচনা করুন: এটি কোনও আক্রমণকারীকে দরকারী তথ্য দিতে পারে। ভাষা ডিজাইনারের কোনও ধারণা নেই যে কোনও অ্যাপ্লিকেশন কীভাবে নিক্ষেপ করা ব্যতিক্রম ব্যবহার করবে বা এটি কী ধরণের অ্যাপ্লিকেশন (যেমন ওয়েব অ্যাপ্লিকেশন বা ডেস্কটপ) তা ব্যবহার করবে না, সুতরাং তথ্য ছেড়ে দেওয়া কোনও সুরক্ষা দৃষ্টিকোণ থেকে নিরাপদ হতে পারে।

  2. ব্যতিক্রম ব্যবহারকারীর কাছে প্রদর্শিত হবে না । পরিবর্তে, একটি বন্ধুত্বপূর্ণ ত্রুটি বার্তা প্রদর্শন করুন এবং আক্রমণকারীটির কোনও অ্যাক্সেস নেই এমন স্থানে ব্যতিক্রমটি লগ করুন (যদি প্রযোজ্য থাকে)। ত্রুটি শনাক্ত হওয়ার পরে, কোনও বিকাশকারীকে স্ট্যাক ফ্রেম এবং লজিক পাথগুলি পরীক্ষা করে কোডের মাধ্যমে ডিবাগ করা উচিত। এই মুহুর্তে, বিকাশকারীটির কাছে কোনও ব্যতিক্রম আশা করা যায় তার চেয়ে বেশি তথ্য থাকে।


3
১. এই মানদণ্ডের উপর ভিত্তি করে এটি তুলনামূলকভাবে স্বতঃস্ফূর্ত মনে হয় যা তথ্য ("সূচকের বাইরে সীমা", স্ট্যাক ট্রেস) এবং (সূচকের মান) প্রদর্শিত হয়নি। ২. প্রাসঙ্গিক গতিশীল মানগুলি জানা থাকলে ডিবাগিং সম্ভাব্যভাবে অনেক দ্রুত এবং সহজ হতে পারে। উদাহরণস্বরূপ এটি প্রায়শই তাত্ক্ষণিকভাবে আপনাকে বলবে যে সমস্যাটি কোডের টুকরোটিতে ব্যর্থতা যা ব্যর্থ হয়েছে, বা সেই কোডটি সঠিকভাবে ভাল ইনপুট নিয়ে কাজ করতে ব্যর্থ হয়েছে
বেন অ্যারনসন

@ বেনআরনসন ব্যতিক্রমের পরিচয় / শ্রেণি আমাদের ত্রুটির ধরণ বলে tells আমার বক্তব্যটি হল সুরক্ষার জন্য বিশদটি বাদ দেওয়া যেতে পারে (অর্থাত্ কোন নির্দিষ্ট মানটি ত্রুটির কারণ হয়েছিল)। আক্রমণকারীর কাছে তথ্য প্রকাশ করে সেই মানটি ব্যবহারকারীর ইনপুট থেকে ফিরে পাওয়া যায়।

@ স্নোমান আমি দৃ full়ভাবে মনে করি যে যখন একটি সম্পূর্ণ স্ট্যাক ট্রেস পাওয়া যায় এবং সূচক সংখ্যাটি পাওয়া যায় না তখন সুরক্ষা বিবেচনা করা হয়। অবশ্যই আমি কোনও আক্রমণকারী বুঝতে পেরেছি যে বাফার ওভারফ্লোসের জন্য অনুসন্ধান করছে, তবে অনেক ব্যতিক্রম বেশ নিরাপদ ডেটাও ফেলে রাখে (উদাহরণস্বরূপ যে ওরাকল টেবিলটি পাওয়া যায় নি)
gbjbaanb

@gbjbaanb কে বলেছে যে আমাদের ব্যবহারকারীর কাছে পুরো স্ট্যাক ট্রেস দেখাতে হবে?

1
এই অন্তর্দৃষ্টি ভাগ করে নেওয়ার জন্য ধন্যবাদ। ব্যক্তিগতভাবে, আমি সম্মত হই না এবং মনে করি সুরক্ষা যুক্তিটি সম্পূর্ণ ভুল।
মার্টিন বা

4

প্রথমে, আমি এই বলে বাবলটি ফাটিয়ে দিই এমনকি ডায়াগ বার্তাটি এমন তথ্য দিয়ে লোড করা হয় যা আপনাকে 4 সেকেন্ডের মধ্যে সঠিক কোড লাইন এবং সাব কমান্ডের কাছে নিয়ে আসে, সম্ভাবনা হ'ল ব্যবহারকারীরা কখনই এটি লিখে বা সমর্থন লোকদের কাছে জানাতে পারবেন না এবং আপনাকে বলা হবে "আচ্ছা এটি একটি লঙ্ঘন সম্পর্কে কিছু বলেছিল ... আমি জানি না এটি জটিল দেখাচ্ছে!"

আমি এখন ৩০ বছরেরও বেশি সময় ধরে সফ্টওয়্যার লিখছি এবং অন্যের ফলাফলগুলিকে সমর্থন করছি এবং ব্যক্তিগতভাবে, একটি ব্যতিক্রম বার্তার বর্তমান মানের সুরক্ষার সাথে কার্যত কিছুই করার নেই, শেষের ফলাফলগুলি কীভাবে তাদের মডেলের সাথে ফিট করে তা নির্বিশেষে মহাবিশ্ব, আমাদের শিল্পের মধ্যে অনেক লোক মূলত স্ব-শিক্ষিত ছিল এবং এগুলি যোগাযোগের পাঠকে কখনই অন্তর্ভুক্ত করে না, এই বিষয়টি নিয়ে আরও অনেক কিছুই করা যায়। আমরা যদি সমস্ত নতুন কোডারকে দু'বছর ধরে কোনও রক্ষণাবেক্ষণের স্থানে জোর করে ফেলেছিলাম যেখানে তাদের কী ভুল হয়েছে তা নির্ধারণের জন্য, তারা কমপক্ষে কিছুটা নির্ভুলতার গুরুত্ব বুঝতে পারে।

সম্প্রতি একটি অ্যাপ্লিকেশন পুনর্নির্মাণের সময়, একটি সিদ্ধান্ত নেওয়া হয়েছিল যে রিটার্ন কোডগুলি তিনটি দলের একটির মধ্যে পড়বে:

  • 0 থেকে 9 অতিরিক্ত তথ্য দিয়ে সাফল্যের মাধ্যমে সাফল্য হবে।
  • 10 থেকে 99 এর মধ্যে মারাত্মক (পুনরুদ্ধারযোগ্য) ত্রুটি হবে এবং
  • 101 এর মাধ্যমে 255 মারাত্মক ত্রুটি হবে।

(১০০ কোনও কারণে বাকি ছিল)

কোনও নির্দিষ্ট কর্মপ্রবাহে, আমাদের চিন্তার পুনঃব্যবহার করা হয়েছিল বা জেনেরিক কোড মারাত্মক ত্রুটির জন্য জেনেরিক রিটার্ন (> 199) ব্যবহার করবে, আমাদের কাজের প্রবাহের জন্য 100 টি মারাত্মক ত্রুটি রেখেছিল। বার্তায় সামান্য পার্থক্যযুক্ত ডেটার সাথে ফাইল পাওয়া যায় না এমন ত্রুটিগুলি একই কোড ব্যবহার করতে পারে এবং বার্তাগুলির সাথে পার্থক্য করতে পারে।

কোডটি ঠিকাদারদের কাছ থেকে ফিরে এলে আপনি যখন আমাদের কার্যকরীভাবে প্রতিটি একক ফ্যাটাল ত্রুটি 101 ফিরিয়ে দেন তখন আপনি আমাদের অবাক করে বিশ্বাস করবেন না।

আপনার বিবেচনায় থাকা সমস্তই আমি মনে করি যে আপনার প্রশ্নের উত্তর বার্তাগুলি এত অর্থহীন কারণ যখন এটি তৈরি করা হয়েছিল তখন তাদের স্থানধারক হতে হবে যাতে কেউ ফিরে পায়নি। অবশেষে লোকেরা কীভাবে বার্তাগুলির কারণে নয় তবে সেগুলি ছড়িয়ে দেওয়ার জন্য সমস্যাগুলি কীভাবে ঠিক করবেন তা নির্ধারণ করেছেন।

সেই সময় থেকে, স্ব-শিখানো লোকেরা কখনও ব্যতিক্রমের মধ্যে কী থাকতে হবে তার একটি ভাল উদাহরণ কখনও ছিল না। যোগ করুন যে আরও ব্যবহারকারী বার্তাগুলি পড়েন না, সমর্থন করার জন্য এটি কম দেওয়ার চেষ্টা করুন (আমি ত্রুটি বার্তাগুলি দেখেছি যা ব্যবহারকারীর দ্বারা কাটা এবং পেস্ট করা হয়েছিল যা পরে মন্তব্য করার পরে প্রেরণের আগে পুনরায় তৈরি করা হয়েছিল যে এটি অনেকগুলি তথ্যের মতো মনে হয়েছিল এবং আমি সম্ভবত এটি সবই চাইতে পারি না, তাই তারা এলোমেলোভাবে এটির একটি গোছা সরিয়ে ফেলে।

এবং পরবর্তী প্রজন্মের কোডারদের প্রচুর পরিমাণে (সমস্ত নয় তবে অনেকগুলি) এর সাথে এটির মুখোমুখি হতে দেয়, যদি এটি বেশি কাজ করে এবং ফ্ল্যাশ যোগ না করে, তবে এটির মূল্য নেই ...

শেষ দ্রষ্টব্য: যদি কোনও ত্রুটি বার্তায় একটি ত্রুটি / রিটার্ন কোড অন্তর্ভুক্ত থাকে তবে আমার কাছে মনে হয় মৃত্যুদন্ড কার্যকর করা মডিউলগুলির মধ্যে কোথাও একটি লাইন থাকা উচিত যা "যদি শর্ত ফেরতের কোড-মান" এর মতো কিছু পড়বে এবং শর্তটি আপনাকে বলবে যে কেন রিটার্ন কোড ঘটেছে। এটি একটি সাধারণ যৌক্তিক পদ্ধতির মতো বলে মনে হচ্ছে, তবে আমার জীবনের জন্য, উইন্ডোজ আপগ্রেড যখন কোড 80241013 বা অন্য কোনও অনন্য সনাক্তকারীকে উইন্ডোজ আপগ্রেড করতে ব্যর্থ হয়েছিল তখন কী হয়েছিল তা আপনাকে জানাতে মাইক্রোসফ্টকে জিজ্ঞাসা করার চেষ্টা করুন। কিন্ডা দুঃখ, তাই না?


8
"... আপনি যখন আমাদের একক ফ্যাটাল ত্রুটিটি 101 এর কোডটি ফিরে আসেন তখন আপনি আমাদের অবাক করে বিশ্বাস করবেন না।" তুমি ঠিক বলছো. আমি বিশ্বাস করব না যখন আপনি ঠিকাদার আপনার নির্দেশাবলী অনুসরণ করেছিলেন তখন আপনি অবাক হয়েছিলেন।
ওডাল্রিক

3
chances are the users will never write it down... and you will be told "Well it said something about a violation..." এজন্য আপনি স্ট্যাক ট্রেসযুক্ত ত্রুটি প্রতিবেদনটি স্বয়ংক্রিয়ভাবে উত্পন্ন করতে এবং সম্ভবত এটি আপনার সার্ভারে প্রেরণের জন্য একটি ব্যতিক্রম লগিং সরঞ্জাম ব্যবহার করেন। আমার এক সময় একজন ব্যবহারকারী ছিলেন যারা খুব প্রযুক্তিগত ছিলেন না। প্রতিবার সে ত্রুটি লগারের কাছ থেকে কোনও বার্তা জমা দেওয়ার সময় "আমি কী ভুল করেছি তা নিশ্চিত নই, তবে ..." এর মতো কিছু হবে যখনই আমি যতবার ব্যাখ্যা করেছি যে এই ত্রুটিটি বাগটি আমার পক্ষে ছিল । তবে, আমি সবসময় তার কাছ থেকে ত্রুটি রিপোর্ট পেয়েছি!
ম্যাসন হুইলারের

3

যদিও আমি সম্মত হই যে ব্যতিক্রমগুলি যতটা সম্ভব তথ্য থাকা উচিত, বা কমপক্ষে কম জেনেরিক হওয়া উচিত। সারণীতে পাওয়া যায় নি, টেবিলের নামটি সুন্দর হবে।

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

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

তবে যদি আপনি এই ব্যতিক্রমটি ধরে ফেলেন এবং যে এসকিউএল-বিবৃতিটি কার্যকর করার চেষ্টা করছেন তা দিয়ে এটি পুনরায় প্রকাশ করেন, তবে আপনি আরও ভাল হবেন, কারণ দেখা যাচ্ছে যে আপনি নামটির ক্ষেত্র রবার্ট বলে রেকর্ড toোকানোর চেষ্টা করেছিলেন '); টেবিল স্টুডেন্টস ড্রপ; (সর্বদা একটি এক্সকেসিডি থাকে!)

সুতরাং তথ্যবহুল ব্যতিক্রমগুলির চেয়ে কম লড়াইয়ের জন্য: আপনি যা করার চেষ্টা করছেন তার সাথে সম্পর্কিত আরও তথ্যের সাথে পুনরায় চেষ্টা করুন catch

আমার সম্ভবত যুক্ত করা উচিত, প্রশ্নের উত্তর হিসাবে এটি আরও উত্তর হওয়ার জন্য, যেগুলি সম্ভবত গ্রন্থাগারগুলির নির্মাতাদের ব্যতিক্রম বার্তাগুলি আরও ভাল করে তোলার দিকে কেন্দ্রীভূত করা হয়নি, তা সম্ভবত তারা জানে না? কেন কিছু ব্যর্থ হয়েছে যে ব্যর্থ হয়েছে, সেই যুক্তি কলিং কোডে রয়েছে in


যেমন সি ++ এ আপনার throw_with_nestedপ্রচুর ব্যবহার করা উচিত ।
মাইলস রুট 23

3

কিছুটা আলাদা উত্তর দিতে: আপত্তিজনক কোডটি সম্ভবত অনুমানের জন্য করা হয়েছে:

  • ফাংশনটি এক্স গ্রহণ করে এবং ওয়াই প্রদান করে
  • এক্স অবৈধ হলে, ব্যতিক্রম Z নিক্ষেপ করুন

ন্যূনতম সময়ে এবং ন্যূনতম গোলযোগের সাথে নির্দিষ্টভাবে (পর্যালোচনা / পরীক্ষায় প্রত্যাখ্যানিত হওয়ার ভয়ে) নির্দিষ্ট পরিমাণে সরবরাহ করার চাপ যুক্ত করুন, তারপরে আপনার সম্পূর্ণরূপে অনুবর্তী এবং অসহায় গ্রন্থাগার ব্যতিক্রমের জন্য আপনার রেসিপি রয়েছে।


3

ব্যতিক্রমগুলির একটি ভাষা রয়েছে- এবং বাস্তবায়ন-নির্দিষ্ট ব্যয়।

উদাহরণস্বরূপ, সি ++ ব্যতিক্রমগুলি কল ফ্রেম নিক্ষেপ এবং কল ফ্রেম ধরার মধ্যে থাকা সমস্ত জীবন্ত ডেটা ধ্বংস করতে হবে এবং এটি ব্যয়বহুল। অতএব, প্রোগ্রামাররা ব্যতিক্রমগুলি অনেক বেশি ব্যবহার করার ইচ্ছা রাখে না।

ওক্যামেলে ব্যতিক্রম নিক্ষেপ করা প্রায় সি-এর মতো দ্রুত হয় setjmp(এটির দাম ট্র্যাশড কল ফ্রেমের সংখ্যার উপর নির্ভর করে না), তাই বিকাশকারীরা এটি প্রচুর পরিমাণে ব্যবহার করতে পারে (এমনকি ব্যতিক্রমী, খুব সাধারণ, কেস ক্ষেত্রেও)। বিপরীতে, সি ++ ব্যতিক্রমগুলি যথেষ্ট ভারী তাই সম্ভবত আপনি ওকেমলে যেমন ব্যবহার করেন তেমন ব্যবহার করেন না।

একটি সাধারণ উদাহরণ হ'ল কিছু পুনরাবৃত্ত অনুসন্ধান বা অন্বেষণ যা বেশ গভীর পুনরাবৃত্তির অভ্যন্তরে "থামানো" যেতে পারে (উদাহরণস্বরূপ গাছের মধ্যে একটি পাতাগুলি সন্ধান করুন, বা একীকরণের ক্রিয়া)। কিছু ভাষায় প্রতিটি আহ্বানকারীকে সেই শর্তটি প্রচার করা দ্রুত (তাই বেশি মূর্তিমান) is অন্যান্য ভাষায়, একটি ব্যতিক্রম ছোঁড়া দ্রুত হয়।

সুতরাং ভাষার উপর নির্ভর করে (এবং এটি ব্যবহারকারীদের অভ্যাস), একটি ব্যতিক্রম অনেক উপকারী বিবরণ বহন করতে পারে বা বিপরীতে দ্রুত অ-স্থানীয় লাফ হিসাবে ব্যবহৃত হতে পারে এবং কেবল খুব দরকারী ডেটা বহন করে।


6
"উদাহরণস্বরূপ, কল ফ্রেম নিক্ষেপ এবং কল ফ্রেম ধরার মধ্যে থাকা সমস্ত জীবন্ত ডেটা ধ্বংস করার জন্য সি ++ ব্যতিক্রম প্রয়োজন, এবং এটি ব্যয়বহুল Hence সুতরাং, প্রোগ্রামাররা ব্যতিক্রমকে অনেক বেশি ব্যবহার করার ইচ্ছা পোষণ করে না।" মোট জঞ্জাল। সি ++ ব্যতিক্রমগুলির প্রধান শক্তি হ'ল ধ্বংসকারীদের নির্বিচারে বলা হয়। তারা কেবল লাফিয়ে উঠলে কেউ এগুলি ব্যবহার করবে না।
মাইলস রাউট

আমি এটি জানি, তবে এটি সত্য যে সি ++ ব্যতিক্রমগুলি ওকামেলের মতো নয় এবং আপনি ওকামলে যেমন করেন তেমন সেগুলি ব্যবহার করেন না।
বেসিল স্টারিনকিভিচ

5
আপনি মূলত সি ++ তে নিয়ন্ত্রণ প্রবাহের জন্য সি ++ ব্যতিক্রমগুলি ব্যবহার করেন না কারণ এটি করা কোডটি অপঠনযোগ্য এবং বোঝা শক্ত করে তোলে।
মাইলস রাউথ

-2

আপনি কি মনে সূচক মান বা প্রয়োজনীয় ব্যাপ্তি বা টেবিলের নাম তোলে হয় একটি দরকারী বিস্তারিত, একটি ব্যতিক্রম জন্য?

ব্যতিক্রমগুলি ত্রুটি পরিচালনা করার প্রক্রিয়া নয়; তারা একটি পুনরুদ্ধার প্রক্রিয়া।

ব্যতিক্রমগুলির বিন্দুটি হ'ল ব্যতিক্রমগুলি পরিচালনা করতে পারে এমন কোডের স্তরে বুদবুদ। যে স্তরটি যেখানেই হোক না কেন আপনার কাছে প্রয়োজনীয় তথ্য রয়েছে বা এটি প্রাসঙ্গিক নয়। আপনার যদি প্রয়োজনীয় তথ্য থাকে তবে তা অবিলম্বে অ্যাক্সেস না পেয়ে আপনি উপযুক্ত পর্যায়ে ব্যতিক্রমটি পরিচালনা করছেন না।

অতিরিক্ত তথ্য কোথা থেকে সহায়ক হতে পারে সে সম্পর্কে আমি একবার ভাবতে পারি এটি হ'ল আপনার আবেদনের একেবারে শীর্ষ স্তরে যেখানে আপনি ক্রাশ করে একটি ত্রুটি ডাম্প নিঃসরণ করেন; তবে এই তথ্য অ্যাক্সেস, সংকলন এবং সঞ্চয় করার ব্যতিক্রমটির কাজ নয়।

আমি বলছি না যে আপনি যে কোনও জায়গায় "নতুন এক্সকেনশন" ফেলে দিতে পারেন এবং এটিকে ভাল বলতে পারেন, খারাপ ব্যতিক্রমগুলি লেখা সম্ভব। তবে অপ্রাসঙ্গিক তথ্য সহ সেগুলি সঠিকভাবে ব্যবহারের জন্য নেসেকারি নয়।


আমি অনুপস্থিত ডাটাবেস টেবিলের নামটিকে অপ্রাসঙ্গিক হিসাবে বর্ণনা করব না যদিও আপনি যে পয়েন্টটি তৈরি করছেন তা আমি বুঝতে পারি এবং তার প্রতি সহানুভূতি জানি। আমি আপনাকে একটি আপ ভোট দিয়েছেন।
ড্যানিয়েল হোলিনরাকে

1
@ ড্যানিয়েলহোলিনরাকে হ্যাঁ, টেবিলের নাম অবশ্যই উদাহরণগুলির মধ্যে অন্তত অপ্রাসঙ্গিক। আমি যে কোডটি দিয়ে কাজ করছি তাতে এই ধরণের সমস্যা হতাশাজনকভাবে সাধারণ এবং টেবিলের নামটি কীভাবে মঙ্গল করা হয়েছে তা দেখার জন্য কী ভুল তা প্রমাণ করতে পারে। আমি কেন এই বিষয়গুলি ব্যতিক্রমের সাথে অপ্রাসঙ্গিক, তার একটি উদাহরণ চিন্তা করার চেষ্টা করেছি; সম্ভবত আমি এটি ব্যবহার করতে পারি ...
ওডাল্রিক

আমি একমত না একটি ব্যতিক্রম হ্যান্ডেল করার জন্য অতিরিক্ত বিশদ প্রয়োজন হতে পারে না কারণ আপনি কেবল অ্যাপ্লিকেশনটিকে ক্রাশ হওয়া থেকে রক্ষা করতে চান তবে অবশেষে আপনাকে এটি কেন কাজ করে না তা জানাতে হবে এবং এটি ঠিক করতে সক্ষম হবেন। আপনার যদি কোনও ক্লু না থাকে তবে ব্যতিক্রমের ধরণটি তবে ভাল চেহারা ডিবাগিং।
t3chb0t

@ t3chb0t এই ব্যতিক্রম এবং মেমরির ডাম্পের স্ট্যাক ট্রেস এবং শ্রেণি এবং অন্যান্য কিছুর জন্য। কোনও গ্রাহক যদি ফোন করে এবং বলেন যে "কম্পিউটারটি আমাকে বলে যে এটি 5 সূচক অ্যাক্সেস করার চেষ্টা করেছে এবং এটি সেখানে ছিল না" কীভাবে এটি আপনাকে সহায়তা করবে । এটা তোলে পারে শুধুমাত্র সাহায্য করেন তাহলে আপনি তালিকা এবং তালিকা এবং অন্য কিছু সহায়ক হতে পারে জন্য প্রসঙ্গ ধারাবাহিকভাবে। প্রতিবার আপনি ব্যতিক্রম ছুঁড়ে ফেললে আপনার অ্যাপ্লিকেশনটির পুরো রাজ্যটি ক্রমিক করা উচিত নয়।
ওডাল্রিক

গ্রাহকের জন্য @Odalrick এটা কোন অর্থ নাও থাকতে পারে কিন্তু একটি ডেভেলপার হিসেবে আমি প্রতি আমি যে তথ্য ;-) হয়তো অন্য একটি উদাহরণ পেতে পারেন তারপর মান: ধরুন একটি SqlExeption ঘটে এবং যে আপনি যা জানেন সবকিছু যাক ... এটা অনেক সহজ হয় মেরামতের এটা আপনি যদি জানেন যে কোন সংযোগের স্ট্রিং বা ডাটাবেস বা টেবিল ইত্যাদি কাজ করে না .... এবং যদি আপনার অ্যাপ্লিকেশন বেশ কয়েকটি ডাটাবেস ব্যবহার করে তবে এটি আরও বেশি গুরুত্বপূর্ণ। একটি বিশদ স্ট্যাক ট্রেসের জন্য পিডিবি-ফাইলগুলি অ্যাপ্লিকেশন সহ প্রেরণ করা প্রয়োজন ... এটি সর্বদা সম্ভব হয় না। এছাড়াও মেমরি ডাম্পগুলি খুব বড় আকার ধারণ করতে পারে এবং সর্বদা স্থানান্তরিত হতে পারে না।
t3chb0t
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.