উইন্ডোজ ফর্ম অ্যাপ্লিকেশনটিতে ব্যতিক্রম হ্যান্ডলিংয়ের জন্য সেরা অনুশীলন?


118

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

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

আমি বর্তমানে প্রধান জিনিসগুলি নিয়ে কাজ করার চেষ্টা করছি:

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

কৃতজ্ঞতার সাথে সমস্ত পরামর্শ!

উত্তর:


79

আরও কয়েকটি বিট ...

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

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

আপনি যখন একেবারে, ইতিবাচকভাবে নিশ্চিত হন যে ব্যতিক্রমটি নিক্ষেপ করা হচ্ছে সেগুলি উপযুক্ত sure এটি প্রায় কখনও ঘটবে না। (এবং যদি এটি হয় তবে নিশ্চিত হয়ে নিন যে আপনি কেবলমাত্র নির্দিষ্ট ব্যতিক্রম শ্রেণিটিই গ্রাস করছেন - কখনও গ্রাস করবেন না System.Exception))

গ্রন্থাগারগুলি তৈরি করার সময় (আপনার অ্যাপ্লিকেশন দ্বারা ব্যবহৃত), ব্যতিক্রমগুলি গ্রাস করবেন না এবং ব্যতিক্রমগুলি বুবলি হতে ভয় পাবেন না। আপনার যুক্ত করতে দরকারী কিছু না হলে পুনরায় নিক্ষেপ করবেন না। কখনও (সি # তে) এটি করবেন না:

throw ex;

আপনি কল স্ট্যাকটি মুছবেন। যদি আপনাকে অবশ্যই পুনরায় নিক্ষেপ করতে হবে (যা মাঝেমধ্যে প্রয়োজনীয়, যেমন এন্টারপ্রাইজ লাইব্রেরির ব্যতিক্রম হ্যান্ডলিং ব্লক ব্যবহার করার সময়), নিম্নলিখিতটি ব্যবহার করুন:

throw;

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

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


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

2
@ সুপের্যাট ApplicationExceptionসেই ব্যর্থতার ক্ষেত্রে নির্দিষ্ট সাবক্লাস লিখে যা অ্যাপ্লিকেশনটি যুক্তিসঙ্গতভাবে পার্থক্য করতে এবং পরিচালনা করতে সক্ষম হওয়া উচিত।
ম্যাট এনরাট

@ ম্যাট এনরাইট: অবশ্যই নিজের ব্যতিক্রমগুলি ধরা সম্ভব, তবে ব্যর্থতার দ্বারা বোঝানো কোনও বিষয় ছাড়িয়ে বাইরের কোনও রাষ্ট্রের দুর্নীতির ইঙ্গিত দেয় কিনা সেগুলি সম্পর্কে যে মডিউলগুলি ব্যতিক্রম করে তা ইঙ্গিত করে এমন কোনও কনভেনশনের সাথে দূরবর্তী অনুরূপ কিছু সম্পর্কে আমি অজানা। আদর্শভাবে, সুপারডোকামেন্টের মতো একটি পদ্ধতি re ক্রিয়েটফ্রومফাইলে () হয় সফল হয়, ক্লিনফিলার ব্যতিক্রম ছুঁড়ে দেয় বা কোনও কিছু ছুঁড়ে ফেলে দেয় সাম্প্রতিকভাবে ব্যাডহ্যাপেনডে এক্সসেপশন। দুর্ভাগ্যবশত, যদি না এক গোপন সবকিছু যে তার নিজস্ব ধরা ব্লকের মধ্যে একটি ব্যতিক্রম ফেলে দিতে পারে, কোন উপায় হল একটি InvalidOperationException কিনা ... জানতে এর
supercat

@ ম্যাট এনরাইট: ... একটি ক্লিনফয়েলচার এক্সসেপশন বা কোনও কিছু রিয়েললিবেডহ্যাপেনএক্সসেপশন মোড়ানো উচিত। এবং ব্যক্তিগত চেষ্টা-ব্লকগুলিতে সমস্ত কিছু মোড়ানো প্রথম স্থানে ব্যতিক্রম হওয়ার পুরো উদ্দেশ্যকে পরাস্ত করে।
ক্যাট

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

63

এখানে একটি দুর্দান্ত কোড কোডপ্রজেক্ট নিবন্ধ রয়েছে । এখানে কয়েকটি হাইলাইট দেওয়া হয়েছে:

  • সবচেয়ে খারাপের জন্য পরিকল্পনা করুন *
  • তাড়াতাড়ি পরীক্ষা করে দেখুন
  • বাহ্যিক ডেটা বিশ্বাস করবেন না
  • একমাত্র নির্ভরযোগ্য ডিভাইসগুলি হ'ল: ভিডিও, মাউস এবং কীবোর্ড।
  • লেখাগুলিও ব্যর্থ হতে পারে
  • নিরাপদে কোড
  • নতুন ব্যতিক্রম নিক্ষেপ করবেন না ()
  • বার্তা ক্ষেত্রে গুরুত্বপূর্ণ ব্যতিক্রম তথ্য রাখবেন না
  • প্রতিটি থ্রেডে একক ক্যাচ (ব্যতিক্রম ব্যতিক্রম) রাখুন
  • ধরা জেনেরিক ব্যতিক্রম প্রকাশ করা উচিত
  • লগ এক্সেপশন.টিস্ট্রিং (); কখনও ব্যাতিক্রম লগইন করুন।
  • থ্রেড প্রতি একাধিকবার (ব্যতিক্রম) ধরবেন না
  • কখনও ব্যতিক্রম গ্রাস করবেন না
  • পরিস্কার কোড শেষ অবধি ব্লক করা উচিত
  • সর্বত্র "ব্যবহার" করুন
  • ত্রুটির শর্তে বিশেষ মানগুলি ফিরিয়ে দেবেন না
  • কোনও উত্সের অনুপস্থিতি নির্দেশ করতে ব্যতিক্রমগুলি ব্যবহার করবেন না
  • কোনও পদ্ধতি থেকে তথ্য ফেরত দেওয়ার উপায় হিসাবে ব্যতিক্রম হ্যান্ডলিং ব্যবহার করবেন না
  • অগ্রাহ্য করা উচিত নয় এমন ত্রুটির জন্য ব্যতিক্রমগুলি ব্যবহার করুন
  • একটি ব্যতিক্রম পুনরায় নিক্ষেপ করার সময় স্ট্যাক ট্রেস সাফ করবেন না
  • শব্দার্থক মান যোগ না করে ব্যতিক্রম পরিবর্তন করা এড়িয়ে চলুন
  • ব্যতিক্রমগুলি চিহ্নিত করা উচিত [সিরিয়ালাইজযোগ্য]
  • সন্দেহ হলে, দৃsert়তা দেবেন না, একটি ব্যতিক্রম নিক্ষেপ করুন
  • প্রতিটি ব্যতিক্রম শ্রেণিতে কমপক্ষে তিনটি মূল নির্মাতা থাকতে হবে
  • অ্যাপডোমাইন ব্যবহার করার সময় সতর্কতা অবলম্বন করুন n
  • চাকা পুনরুদ্ধার করবেন না
  • কাঠামোগত ত্রুটি পরিচালনা (VB.Net) ব্যবহার করবেন না

3
আপনি কি আমাকে এই বিন্দু থেকে আরও কিছুটা ব্যাখ্যা করতে আপত্তি করবেন? "কোনও উত্সের অনুপস্থিতি নির্দেশ করতে ব্যতিক্রমগুলি ব্যবহার করবেন না" আমি এর পিছনে কারণটি বুঝতে পেরেছি তা সম্পর্কে আমি নিশ্চিত নই। এছাড়াও কেবল একটি মন্তব্য: এই উত্তরটি "কেন" মোটেই ব্যাখ্যা করে না। আমি জানি এটি 5 বছর বয়সী তবে এটি এখনও আমাকে কিছুটা
রামি

রেফারেন্স করা নিবন্ধটির লিঙ্কটির মেয়াদ শেষ হয়ে গেছে। কোড প্রকল্প পরামর্শ দেয় যে নিবন্ধটি এখানে স্থানান্তরিত হতে পারে ।
ডেভিডআরআর

15

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

ল্যান্ডিং এবং / অথবা আপনার নিজের ত্রুটি ডায়লগ সরবরাহ করার জন্য এইহ্যান্ডলড ব্যতিক্রমী সংলাপটি প্রদর্শিত হতে পারে এবং এই জাতীয় ব্যতিক্রমগুলি ধরতে আপনি অ্যাপ্লিকেশন-ট্র্যাডএক্সেপশন ইভেন্টের সাথে সংযুক্ত করতে পারেন yourআপনার মেইন () পদ্ধতিতে কল করুন un


এই পরামর্শের জন্য ধন্যবাদ, আমি এটি খুব দেরিতে শিখেছি, আমি এটি কেবল লিনকপ্যাডে যাচাই করেছি, প্রত্যাশার মতো কাজ করি, প্রতিনিধিটি হ'ল: বাতিল form1_UIThreadException (অবজেক্ট প্রেরক, ThreadExceptionEventArgs t) এই বিষয় সম্পর্কে আরও একটি ভাল উত্স হ'ল richmanwman.wordpress.com/2007/ 04/08 /… সামগ্রিকভাবে অপরিবর্তিত ব্যতিক্রম হ্যান্ডলিংয়ের জন্য: অ্যাপডোমেন.অনহানড্লেড এক্সেপশন ইভেন্টটি নন-মেইন-ইউআই-থ্রেড থেকে নিক্ষেপ করা ব্যতিক্রমহীন ব্যতিক্রমগুলির জন্য।
zhaorufei

14

এখন পর্যন্ত এখানে পোস্ট করা সমস্ত পরামর্শই উত্তম এবং মূল্যবান।

একটি বিষয় যা আমি প্রসারিত করতে চাই তা হ'ল আপনার প্রশ্ন "ডিস্কে কোনও ফাইল রয়েছে কিনা তা প্রাক-পরীক্ষামূলকভাবে পরীক্ষার সাথে তুলনামূলকভাবে পরীক্ষার সাথে তুলনামূলকভাবে পারফরম্যান্স হিট করতে পারে?"

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

উদাহরণস্বরূপ, আপনি যদি অভিধান তৈরি করছেন, এটি:

try
{
   dict.Add(key, value);
}
catch(KeyException)
{
}

এটি করার চেয়ে প্রায়শই দ্রুত হয়:

if (!dict.ContainsKey(key))
{
   dict.Add(key, value);
}

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

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

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


3
ডিকের ক্ষেত্রে, আপনি কেবল এটি করতে পারেন: dict[key] = valueযা দ্রুত না হলে দ্রুত হওয়া উচিত ..
নওফাল

9

এখানে আমি কয়েকটি গাইডলাইন অনুসরণ করছি

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

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

  3. আপনি যে ব্যতিক্রমগুলি পরিচালনা করতে পারবেন না তা ধরবেন না, সুতরাং আউটঅফমিউরিঅ্যাকসেপশন জাতীয় জিনিসগুলির বিষয়ে চিন্তা করবেন না কারণ যদি সেগুলি ঘটে তবে আপনি যেভাবেই করতে পারবেন না।

  4. গ্লোবাল ব্যতিক্রম ব্যান্ড হ্যান্ডলারগুলি করুন এবং যথাসম্ভব তথ্য লগ করতে নিশ্চিত করুন। উইনফর্মগুলির জন্য অ্যাপডোমেন এবং থ্রেড উভয়ই হ্যান্ডেলড ব্যতিক্রম ইভেন্টগুলিকে হুক করে।

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

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

  7. যদি আপনি আশা করেন যে আপনার কোডের কলকারী ত্রুটি শর্তগুলি পরিচালনা করতে সক্ষম হন তবে কাস্টম ব্যতিক্রমগুলি তৈরি করুন যা অবিস্মরণীয় পরিস্থিতি কী তা বিশদে এবং প্রাসঙ্গিক তথ্য সরবরাহ করে। অন্যথায় যতটা সম্ভব বিল্ট-ইন ব্যতিক্রম প্রকারগুলিতে কেবল আঁকুন।


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

আপনি Application.ThreadExceptionযখন "থ্রেড আনহ্যান্ডেল ব্যতিক্রম" ইভেন্টটি উল্লেখ করেছেন তখন কি আপনার ইভেন্টটি পরিচালনা করার অর্থ ছিল ?
জেফ বি

4

আমার বিশেষ প্রসঙ্গে হ্যান্ডলিংয়ের অর্থ যাই হোক না কেন, হ্যান্ডলিংয়ের উদ্দেশ্যে আমার কোনও উদ্দেশ্য নেই এমন কিছু ধরা না দেওয়ার দর্শন আমার পছন্দ হয়।

যখন আমি কোডগুলি দেখতে পাই তখন আমি এটি ঘৃণা করি:

try
{
   // some stuff is done here
}
catch
{
}

আমি এটি সময়ে সময়ে দেখেছি এবং যখন কেউ ব্যতিক্রমগুলি 'খায়' তখন সমস্যাগুলি খুঁজে পাওয়া বেশ কঠিন। আমার সহকর্মী এটি করেছিলেন এবং এটি ইস্যুগুলির একটি অবিচ্ছিন্ন প্রবাহে অবদান রাখার প্রবণতা অর্জন করে।

ব্যতিক্রমের প্রতিক্রিয়াতে আমার বিশেষ শ্রেণীর কিছু করা দরকার থাকলে আমি পুনরায় নিক্ষেপ করি তবে সমস্যাটি হ'ল পদ্ধতিটি যেখানে এটি ঘটেছে বলা হয় to

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


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

4

আমি কেবল আমার পথে যাচ্ছি তবে ব্যতিক্রম হ্যান্ডলিংটি কোথায় ব্যবহার করবেন সে সম্পর্কে আপনাকে একটি সংক্ষিপ্ত রান দেবে। আমি ফিরে আসার সময় আপনার অন্যান্য পয়েন্টগুলিকে সম্বোধন করার চেষ্টা করব :)

  1. সুস্পষ্টভাবে সমস্ত জ্ঞাত ত্রুটি শর্ত * পরীক্ষা করুন
  2. আপনি যদি সমস্ত কেসগুলি পরিচালনা করতে সক্ষম হন তবে আপনার যদি অনিশ্চিত থাকে তবে কোডটির চারপাশে চেষ্টা করুন / ধরুন
  3. আপনি কল করছেন এমন নেট নেট ইন্টারফেস যদি ব্যতিক্রম ছোঁড়ে তবে কোডটির চারপাশে একটি চেষ্টা / ধরুন
  4. কোডটি যদি আপনার জন্য কোনও জটিলতার প্রান্তকে অতিক্রম করে তবে চেষ্টা করুন / ধরুন around
  5. একটি স্যানিটি চেক করার জন্য কোডটির চারপাশে একটি চেষ্টা করুন / ধরুন: আপনি এটিকে কখনও ঘটবে না বলে দৃ are়ভাবে বলছেন
  6. একটি সাধারণ নিয়ম হিসাবে, আমি রিটার্ন কোডগুলির প্রতিস্থাপন হিসাবে ব্যতিক্রমগুলি ব্যবহার করি না। এটি নেট জন্য ভাল, কিন্তু আমার জন্য না। যদিও এই নিয়মে আমার ব্যতিক্রম আছে (হিহে) তবে এটি নির্ভর করে আপনি যে অ্যাপ্লিকেশনটিতেও কাজ করছেন তার আর্কিটেকচারের উপর।

*কারণসহ. কোনও মহাজাগতিক রশ্মি আপনার ডেটাটিকে হিট করে কি না তা দেখার জন্য কোনও পরীক্ষা করার দরকার নেই। "যুক্তিসঙ্গত" কী তা বোঝা একজন ইঞ্জিনিয়ারের জন্য অর্জিত দক্ষতা। এটি পরিমাণ নির্ধারণ করা কঠিন, তবুও অন্তর্দৃষ্টি সহজ। এটি হ'ল আমি খুব সহজেই ব্যাখ্যা করতে পারি যে আমি কেন কোনও বিশেষ উদাহরণে চেষ্টা / ধরা ব্যবহার করি, তবুও আমি এই একই জ্ঞান দিয়ে অন্যকে প্ররোচিত করতে কঠোর চাপছি।

আমি এক জন্য প্রচণ্ড ব্যতিক্রম ভিত্তিক স্থাপত্য থেকে দূরে ঝোঁক ঝোঁক। চেষ্টা / ধরা যেমন পারফরম্যান্স হিট করে না, ব্যতিক্রমটি ছুঁড়ে ফেলা হলে হিটটি আসে এবং কোনও কিছু হ্যান্ডল করার আগে কোডটিকে কল স্ট্যাকের বিভিন্ন স্তরের উপরে যেতে হতে পারে।


4

যে সুবর্ণ নিয়মটি লেগে থাকার চেষ্টা করেছে তা হ'ল ব্যতিক্রমটি যতটা সম্ভব উত্সের কাছাকাছি হ্যান্ডেল করা।

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

আরেকটি নিয়ম যা আমি অনুসরণ করার চেষ্টা করি তা হ'ল প্রোগ্রাম / প্রবাহের রূপ হিসাবে ধরা / ধরা না করা, তাই আমি ফাইল / সংযোগ যাচাই করি, অবজেক্টগুলি আরম্ভ করা হয়েছে তা নিশ্চিত করে, ইত্যাদি .. ব্যবহারের আগে prior চেষ্টা / ধরা ব্যতিক্রমগুলির জন্য হওয়া উচিত, যে জিনিসগুলি আপনি নিয়ন্ত্রণ করতে পারবেন না।

খালি ক্যাচ ব্লক হিসাবে, আপনি যদি কোডটি ব্যতিক্রমী উত্স তৈরি করে এমন কোনও গুরুত্বের কিছু করছেন তবে আপনাকে সর্বনিম্ন ব্যতিক্রমটি পুনরায় নিক্ষেপ করা উচিত। কোডটির কোনও পরিণতি যদি না ঘটে যা ব্যতিক্রম ছুঁড়ে ফেলেছে কেন আপনি এটি প্রথম স্থানে লিখেছিলেন।


এই "সোনার নিয়ম" সর্বোত্তমভাবে স্বেচ্ছাচারী।
ইভান হার্পার

3

আপনি থ্রেডএক্সসেপশন ইভেন্টটি ফাঁদে ফেলতে পারেন।

  1. সলিউশন এক্সপ্লোরারে একটি উইন্ডোজ অ্যাপ্লিকেশন প্রকল্প নির্বাচন করুন।

  2. এর উপর ডাবল ক্লিক করে উত্পন্ন প্রোগ্রাম.cs ফাইলটি খুলুন।

  3. কোড ফাইলের শীর্ষে নীচের কোডটির লাইন যুক্ত করুন:

    using System.Threading;
  4. মেইন () পদ্ধতিতে, পদ্ধতির প্রথম লাইন হিসাবে নিম্নলিখিতগুলি যুক্ত করুন:

    Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
  5. প্রধান () পদ্ধতির নীচে নিম্নলিখিতগুলি যুক্ত করুন:

    static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
    {
        // Do logging or whatever here
        Application.Exit();
    }
  6. ইভেন্ট হ্যান্ডলারের মধ্যে থাকা হাতছাড়া হওয়া ব্যতিক্রমটি পরিচালনা করতে কোড যুক্ত করুন। অ্যাপ্লিকেশনের অন্য কোথাও পরিচালনা করা হয়নি এমন কোনও ব্যতিক্রম উপরের কোড দ্বারা পরিচালিত হয়। সর্বাধিক সাধারণভাবে, এই কোডটিতে ত্রুটিটি লগ করা উচিত এবং ব্যবহারকারীর কাছে একটি বার্তা প্রদর্শন করা উচিত।

পুনঃপ্রকাশ: https://blogs.msmvps.com/deborahk/global-exception-handler-winforms/


@ কিকিনেট দুঃখিত, আমি ভিবি
অমিড-আরএইচ

2

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

ব্যতিক্রম বৃদ্ধির কাজটি ঠিক তেমন করে দিলে পুনরায় নিক্ষেপ করবেন না। ত্রুটিগুলি কখনও বিনা নজরে যেতে দেবেন না।

উদাহরণ:

void Main()
{
  try {
    DoStuff();
  }
  catch(Exception ex) {
    LogStuff(ex.ToString());
  }

void DoStuff() {
... Stuff ...
}

যদি ডো স্টাফ ভুল হয়ে যায় তবে আপনি এটি যেভাবেই জামিনে নিতে চান। ব্যতিক্রমটি মূল দিকে ছুঁড়ে যাবে এবং আপনি প্রাক্তনের স্ট্যাক ট্রেসের ইভেন্টগুলির ট্রেন দেখতে পাবেন।


1

কখন আমার ব্যতিক্রম পুনরায় নিক্ষেপ করা উচিত?

সর্বত্র, তবে ব্যবহারকারী পদ্ধতিগুলি শেষ করুন ... বোতাম ক্লিক হ্যান্ডলারের মতো

আমার কি কোনও ধরণের কেন্দ্রীয় ত্রুটি-পরিচালনা ব্যবস্থা করার চেষ্টা করা উচিত?

আমি একটি লগ ফাইল লিখি ... উইনফর্ম অ্যাপ্লিকেশনটির জন্য বেশ সহজ

ছুঁড়ে দেওয়া হতে পারে এমন ব্যতিক্রমগুলি হ্যান্ডলিংয়ে কি প্রাক-পরীক্ষামূলকভাবে টেস্টের সাথে ডিস্কের কোনও ফাইল বিদ্যমান আছে কি না তা পরীক্ষার সাথে তুলনা করে কোনও পারফরম্যান্স হিট করে?

আমি এ সম্পর্কে নিশ্চিত নই, তবে আমি বিশ্বাস করি যে ব্যতিক্রমগুলি ছুঁড়ে ফেলা ভাল একটি অনুশীলন ... আমি বলতে চাইছি আপনি কোনও ফাইল বিদ্যমান কিনা তা জিজ্ঞাসা করতে পারেন এবং যদি এটি ফাইলনটফাউন্ডএক্সপশন নিক্ষেপ করে না

সমস্ত এক্সিকিউটেবল কোডটি চেষ্টা করে-অবশেষে ব্লকগুলিতে আবদ্ধ করা উচিত?

yeap

এমন কোনও সময় আছে যখন কোনও খালি ক্যাচ ব্লক গ্রহণযোগ্য হতে পারে?

হ্যাঁ, আপনি বলুন যে আপনি একটি তারিখ প্রদর্শন করতে চান, তবে আপনার কীভাবে কোনও তারিখ নেই যে সেই তারিখটি কীভাবে স্টোর ছিল (ডিডি / মিমি / ইয়াই, মিমি / ডিডি / ইয়াই ইত্যাদি) আপনি টিপি পার্স করার চেষ্টা করেন তবে এটি ব্যর্থ হলে কেবল চলতে থাকবে .. ... যদি এটি আপনার কাছে অপ্রাসঙ্গিক হয় ... আমি বলব হ্যাঁ, আছে


1

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

আমি এমন জায়গাগুলিতে খালি ক্যাচ-ব্লক ব্যবহার করেছি যেখানে ব্যবহারকারীর এমন কিছু করতে পারে যা সত্যই "ভুল" নাও হতে পারে তবে এটি একটি ব্যতিক্রম ছুঁড়ে দিতে পারে ... মনে আছে যে উদাহরণটি গ্রিডভিউতে রয়েছে যদি ব্যবহারকারী ধূসর স্থানধারকটিকে ডাবল ক্লিক করে উপরের-বামে থাকা সেলটি সেলডুবলক্লিক ইভেন্টটি জ্বালিয়ে দেবে, কিন্তু ঘরটি একটি সারির নয়। সেক্ষেত্রে , আপনি করবেন না


1

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

Try
{
int a = 10 / 0;
}
catch(exception e){
//error logging
throw;
}

এটি করার ফলে ক্যাচ স্টেটমেন্টে স্ট্যাকের ট্রেসটি শেষ হয়ে যাবে। (এড়ানো)

catch(Exception e)
// logging
throw e;
}

এটি এখনও .NET ফ্রেমওয়ার্ক এবং .NET কোর এর সাম্প্রতিকতম সংস্করণগুলিতে প্রযোজ্য?
লাকিলিকি

1

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

try
{
/*Doing stuff that may cause an exception*/
Response.Redirect("http:\\www.somewhereelse.com");
}
catch (ThreadAbortException tex){/*Ignore*/}
catch (Exception ex){/*HandleException*/}

1

আমি এই নীতির সাথে গভীরভাবে সম্মত:

  • ত্রুটিগুলি কখনও বিনা নজরে যেতে দেবেন না।

কারণটি হ'ল:

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

ফোর্সএসার্ট.এলওয়েসআরসেট হ'ল ডিগ্রী / ট্র্যাক ম্যাক্রো নির্ধারিত কিনা তা বিবেচনা না করেই ট্রেস.এরসেটের আমার ব্যক্তিগত উপায়।

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

এইভাবে আমি আমার আমার লিখতে পারেন অল্প সময়ের মধ্যে কোড এবং অজানা ডোমেন থেকে আমাকে রক্ষা করতে পারি, তবে সর্বদা লক্ষ্য করা যায় যে অস্বাভাবিক কিছু ঘটেছিল কিনা, এই পদ্ধতিটি সিস্টেমটি নিরাপদ এবং আরও সুরক্ষিত হয়ে উঠেছে।

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

উইনফর্মস কোডের জন্য, আমি সবসময় স্বর্ণের নিয়ম মানি তা হ'ল:

  • সর্বদা আপনার ইভেন্ট হ্যান্ডলার কোডটি ধরুন / ধরুন (ব্যতিক্রম)

এটি আপনার ইউআইকে সর্বদা ব্যবহারযোগ্য হিসাবে রক্ষা করবে।

পারফরম্যান্স হিটের জন্য, পারফরম্যান্স পেনাল্টি কেবল তখনই ঘটে যখন কোডটি ক্যাচ পৌঁছে যায়, উত্থাপিত আসল ব্যতিক্রম ছাড়াই ট্রাই কোড কার্যকর করার কোনও উল্লেখযোগ্য প্রভাব নেই।

কিছুটা সুযোগ নিয়েই ব্যতিক্রম হওয়া উচিত, অন্যথায় এটি ব্যতিক্রম নয়।


-1

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

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

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


আপনি কি উত্তরের মতো কম উত্তর লেখার চেষ্টা করতে পারেন এবং পরিবর্তে আরও সুনির্দিষ্ট হওয়ার চেষ্টা করে নিজের কথাটি প্রমাণ করার চেষ্টা করতে পারেন? এছাড়াও কটাক্ষপাত আছে কিভাবে উত্তর দিতে
ভাগ্যবানলাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.