ত্রুটি খারাপ অভ্যাস দমন করা হয়?


14

একটি এসও প্রশ্নে আমি এখানে কিছু কোড সম্পর্কে জিজ্ঞাসা করেছি যে সম্পর্কে আমি অনিশ্চিত ছিলাম, কেউ জবাব দিয়েছিল "বিটিডাব্লু, সেখানে ভয়াবহ কোড: এটি চিহ্নকে দমন করতে ত্রুটিটি ব্যবহার করে (@)" "

এই খারাপ অভ্যাসের কারণ আছে কি? যেমন জিনিস সহ:

$db=@new mysqli($db_info) or die('Database error');

, এটি আমাকে কেবল একটি কাস্টম ত্রুটি বার্তা প্রদর্শন করতে দেয়। ত্রুটি দমন না করে, তারপরেও এটির সাধারণ পিএইচপি বার্তা প্রদর্শিত হবে:

সতর্কতা : mysqli :: mysqli (): php_network_getaddresses: getaddrinfo ব্যর্থ: এ জাতীয় কোনও হোস্ট জানা যায় নি। মধ্যে কিছু \ ফাইল \ পথ উপর লাইন 6

পাশাপাশি 'ডাটাবেস ত্রুটি'

ত্রুটিটি কি সর্বদা দমন করা খারাপ এবং যদি তাই হয় তবে উপরোক্ত বিষয়গুলির মধ্যে বিশেষত খারাপটি কী?

আপডেট: আমি যে আসল কোডটি ব্যবহার করছি তা হ'ল:

or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? '<br />MySQL reported: <b>' . $db->error . '</b><br />Error occurred on line <b>' . __LINE__ . '</b> of <b>' . __FILE__ . '</b>' : ''))

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


9
আপনি যখন খারাপ অভ্যাসটি চালাচ্ছেন তখন কি চোখের পাতায় পড়েছেন?
ড্যামিয়েন রোচে

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

1
@ সোমফ্রিম্যাসন যদি আমাকে ডিবাগ করার দরকার হয় তবে আমি কেবলমাত্র $ ডিবাগ_মোডকে সত্যতে সেট করব, যেহেতু আমি আসল কোডটি ব্যবহার করছি:or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? '<br />MySQL reported: <b>' . $db->error . '</b>' : ''))

@ প্যারাডক্সিকাল: আমি বুঝতে পারি যে পিএইচপি-তে ব্যতিক্রম / ত্রুটি পরিচালনার অবস্থাটি কিছুটা FUBAR, তবে আপনি সচেতন যে আপনি নিজের পিএইচপি কনফিগারেশনে ত্রুটিগুলির দৃশ্য প্রদর্শন বন্ধ করতে পারবেন, তাই না?
ফোশি

@ ফোশি দুর্ভাগ্যক্রমে আমি যে হোস্টিং সার্ভিসটি ব্যবহার করছি তা আমাকে

উত্তর:


14

আমি মনে করি আপনি ত্রুটিটি দমন করে সঠিক জিনিসটি করছেন কারণ আপনি নিজের ত্রুটি পরিচালনার প্রয়োগ করছেন।

জাভাটির সমতুল্য বিবেচনা করা আরও সহজ হতে পারে। ত্রুটিটি ব্যবহার করে দমন করা @ব্যতিক্রম গিলে ফেলার মতো an আপনার মত অনুরূপ নিম্নলিখিত কোডটি যুক্তিসঙ্গত:

try {
    db = new MySQLi(dbInfo);
} catch (SQLException connectionFailure) {
    die("Database error");
}

(আচ্ছা, জাভাতে, আপনি সার্লেট ইঞ্জিনটি মারা যেতে চাইবেন না, তবে আপনি ধারণাটি পাবেন))

তবে এটি গ্রহণযোগ্য নয়:

try {
    db = new MySQLi(dbInfo);
} catch (Exception e) {
}

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


3
আমি ব্যতিক্রম ধরা এবং এটি "পরিচালনা" করার জন্য মৃত্যুদণ্ড কার্যকর করা বন্ধ করব না। আপনি যদি সমস্যাটি সমাধান করতে পারেন তবে দুর্দান্ত do যদি আপনি না পারেন তবে কী ধরছেন? এটি আমাদের জন্য শীর্ষ স্তরের ব্যতিক্রম হ্যান্ডলার রয়েছে। এই ক্ষেত্রে ব্যতিক্রম ধরা কেবলমাত্র আপনার কোডবেস জুড়ে প্রবিষ্ট কোড পরিচালনার ক্ষেত্রে ত্রুটি হয়েছে তা নিশ্চিত করা।
ফোশি

7

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

এই নির্দিষ্ট উদাহরণে, " ডাটাবেস ত্রুটি " খুব ভাল ত্রুটি বার্তা নয়। ডিবিতে কিছু ভুল হয়েছে। খুব আলোকিত নয়। " সতর্কতা: mysqli :: mysqli (): php_network_getaddresses: getaddrinfo ব্যর্থ হয়েছে: এরকম কোনও হোস্ট জানা যায় নি। কিছু in ফাইলের মধ্যে line লাইনের পথে "আসলে আরও ভাল ত্রুটির বার্তা। এটি আপনাকে সমস্যার জন্য একটি অবস্থান এবং কারণ দেয়। আপনি ডানদিকে ঝাঁপিয়ে পড়তে এবং ডিবাগিং শুরু করতে পারেন, কারণ ত্রুটিটি ইতিমধ্যে অবস্থিত।

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

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


5
আপনি আপনার ব্যবহারকারীদের সঠিক ত্রুটি বলতে চান না। আপনি তাদের জানান যে ত্রুটিটি আপনার পক্ষে রয়েছে এবং আপনি এটিতে কাজ করছেন। আপনি আপনার সার্ভারে ত্রুটিগুলি লগ করতে এবং সতর্কতা সেট আপ করতে পারেন যাতে আপনি এটি সম্পর্কে স্বয়ংক্রিয়ভাবে জানতে পারবেন তবে ব্যবহারকারীকে এই ত্রুটিগুলি দেখানোর কোনও কারণ নেই।
জেরোইন ভেনেভেল

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

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

1
স্ক্রিনে ব্যবহারকারী-বান্ধব বার্তা উপস্থাপন এবং লগ ফাইলটিতে প্রযুক্তিগত বার্তা লেখার কোনও উপায় নেই?
হতাশ

3
display_errorsবন্ধ, log_errorsচালু, এবং আপনি যেতে বেশ ভালো, কোনও ত্রুটি সনাক্ত করার জন্য আপনি যেমন খুশি তেমন করুন, তবে সেগুলি ফেলে দিন না।
রিক্কেন

0

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

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

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


0

হ্যাঁ, অপারেটর দমন করতে ত্রুটিটি সাধারণত একটি খারাপ ধারণা।

আপনার কনফিগারেশনে ত্রুটি প্রতিবেদন করা উচিত ( php.ini)। সুতরাং আপনি প্রতিটি পরিবেশের জন্য পৃথক সেটিং চয়ন করতে পারেন (উদাহরণস্বরূপ, বিকাশে সতর্কতাগুলি ছেড়ে দিন এবং সেগুলি উত্পাদনতে আড়াল করুন)।

@আপনি যখন অন্য বিকাশকারীদের জন্য একটি গ্রন্থাগার বিকাশ করেন তখন ব্যবহারের একমাত্র পরিস্থিতি তা বোঝাতে পারে। যদি আপনি স্বেচ্ছায় এমন কোনও কাজ করার সিদ্ধান্ত নেন যা একটি সতর্কতা তৈরি করে এবং আপনার গ্রন্থাগারের ব্যবহারকারীদের এমন সতর্কতা দিয়ে বিরক্ত করতে না চান যা তাদের উপর নির্ভর করে না, তবে @সমাধান হতে পারে।

আমি অন্য কোনও ব্যবহারের কথা ভাবতে পারি না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.