একটি ডিবাগার ব্যবহার এড়ানো সুবিধা কি?


101

আমার কর্মজীবন চলাকালীন, আমি লক্ষ্য করেছি যে কিছু বিকাশকারী ডিবাগিং সরঞ্জামগুলি ব্যবহার করেন না, তবে সমস্যাটি কী তা বোঝার জন্য ভুল কোডটিতে স্পট চেকিং করেন।

যদিও অনেকবার ডিবাগার ছাড়াই কোডে ত্রুটিগুলি দ্রুত খুঁজে পাওয়া সক্ষম হওয়া ভাল দক্ষতা, যদিও কোনও ডিবাগার যখন টাইপসের মতো ছোট্ট ভুল সহজে খুঁজে পায় তখন সমস্যাগুলির সন্ধান করতে অনেক সময় ব্যয় করা কম ফলদায়ক বলে মনে হয়।

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


19
হাই জোনাথন, কোনও ইঁদুরের ফাঁদ এড়াতে এবং প্রশ্নটি উন্মুক্ত রাখতে আমি আপনার প্রশ্নটি সংশোধন করেছি: আমার মনে হয় - এখন যেমন বলা হয়েছে - এটি যথেষ্ট শালীন, উত্তরযোগ্য প্রশ্ন question

উদাহরণ: একটি কোড বিবেচনা করুন a = 6/3। পরিবর্তে টাইপ করে আপনি টাইপ করেছেন a = 6/2.. এখন আপনি স্মৃতিবিদ্যার স্তরে সন্ধান করছেন, ভুল টাইপ। আপনি এখন অনুমান করতে পারেন, সবসময় কোনও ডিবাগার ব্যবহার করা কতটা হাস্যকর।
EAGER_STUDENT

উত্তর:


153

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

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

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

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


27
+1 আমি "অনুমান করে প্রোগ্রামিং" বোঝা একটি বাক্যাংশ বলে মনে করি। ভাবার বিকল্প নেই। ওপি যা বোঝায় না তা হ'ল "অনুমান" কতটা কার্যকর। আমার সন্দেহ হ'ল এগুলি নিখুঁতভাবে অনুমান করা হচ্ছে (অর্থাত্ প্রাচীরের কাছে স্প্যাগেটি), বরং কর্তনমূলক যুক্তি ব্যবহার করে। ডিবাগারদের তাদের জায়গা রয়েছে, তবে তারা অনুক্ষারত যুক্তি এবং কেবল কোডটি বোঝার জন্য কোনও প্যানিসিয়া নয়।
বিল

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

9
+1 যদিও আমি নির্দিষ্ট ধরণের বাগের (বিশেষত আরও জটিল অ্যালগরিদমে) কোনও ডিবাগারকে অমূল্য বলে মনে করি কেবল
ক্রিস ব্রাউন 20

7
@DJClayworth আমি ইচ্ছাকৃতভাবে আর একটি শক্তিশালী বিবৃতি জন্য গিয়েছিলাম "কয়েক অনুষ্ঠান যখন ব্যবহার করছেন না একটি ডিবাগার উত্তম": প্রতিযোগিতামূলক প্রোগ্রামিং সঙ্গে আমার সংক্ষিপ্ত সাক্ষাৎ আমাকে শিখিয়েছিলেন যে প্রবৃত্তিগতভাবে একটি ডিবাগার জন্য পৌঁছনো সবচেয়ে বেশি কার্যকরী আচরণ নয় আমার জন্য । এই দিনগুলিতে আমি (1) দ্রুত কোডটি পুনরায় পঠন এবং (2) ডিবাগের আগে যাওয়ার আগে (3) ডিবাগ ট্রেস পরীক্ষা করে (যখন পাওয়া যায়) পরীক্ষা করে শুরু করি। অনেক ক্ষেত্রে তৃতীয় ধাপটি অপ্রয়োজনীয়, কারণ আমি পদক্ষেপগুলি (1) বা (2) এ সমস্যাটি চিহ্নিত করি, একটি ইউনিট পরীক্ষা লিখি যা সমস্যাটি পুনরুত্পাদন করে এবং একটি ডিবাগার ব্যবহার না করেই একটি সংশোধন কোড দেয় code
dasblinkenlight

10
আমি মনে করি আপনার সত্যিকারের অর্থ হ'ল ম্যাজিক "বাগ বাগ" বোতামটি ক্লিক করার পরিবর্তে একজন প্রোগ্রামারের ডিবাগিং ক্রম থাকা উচিত । একটি ডিবাগার একটি অত্যন্ত শক্তিশালী সরঞ্জাম, তবে আপনি হেজেসগুলি ছাঁটাতে চেইনসো চালাবেন না।
স্পেনসার রথবুন

41

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

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


35

তারা খারাপ প্রোগ্রামার নাও হতে পারে তবে তারা সম্ভবত ভয়াবহভাবে অক্ষম সমস্যা সমাধানকারী।

আমি ডিবাগিংয়ের পরামর্শ অনুসরণ করতে চাই : এমনকি সবচেয়ে বেশি বৈদ্যুতিন সফ্টওয়্যার এবং হার্ডওয়্যার সমস্যাগুলি খুঁজে পাওয়ার জন্য 9 টি অপরিহার্য নিয়ম (ডেভিড আগানস), এবং এটি একটি "চিন্তাভাবনা ত্যাগ করুন এবং দেখুন" এর গাইডেন্সের অধীনে পড়েছে square


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

@ মার্ক প্লাস সমস্যাটি ভুল করে ডায়াগনোসিস যুক্ত করার জন্য যুক্ত করা বোনাস এবং একটি নতুন ত্রুটিযুক্ত প্লাগ ইন।
কিথ

11
@ মার্ক ব্যানিস্টার - আপনি কী বলছেন তা আমি দেখতে পাচ্ছি। আমাকে এটির সংশোধন করতে দিন, আপনি যদি 15 মিনিটেরও বেশি সময় ধরে কোডটিতে সমস্যাটি খুঁজছেন, ছেড়ে দিন এবং ডিবাগারটি ব্যবহার করুন এবং জেদ করবেন না।
জনএফএক্স

9
আমি মনে করি একটি ভাল প্রোগ্রামার ডিবাগারের উপর নির্ভরশীল হওয়া উচিত নয় । এটি তাকে অবিলম্বে
কোনওটি ব্যবহার করা থেকে বিরত

1
আপনি যদি খুব ছোট কোড বেসে কাজ না করেন তবে @ চিহ্নটি আমি মনে করি কোডের প্রতিটি লাইন বোঝা অসম্ভব। আমার বর্ণিত 95% বাগগুলি আপনার বর্ণনাকালীনভাবে সমাধান করা হয়েছে, তবে ট্র্যাবিয়ারগুলি হ'ল আপনার যেখানে ডিবাগার দরকার।
wobbily_col 10 'এ

31

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

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

আমি যত দ্রুত পারলাম সেই দল থেকে নামলাম। তাদের উদ্দেশ্য ছিল কাজটি পালক করা এবং একটি সারাদিন দেখার-ব্যস্ত সমস্যায় একটি সাধারণ 10 মিনিটের সমস্যা।


18
+1 "বেশিরভাগ বাগগুলি অনুমানের কারণে হয়" খুব বুদ্ধিমান শব্দ
জেডজেআর

15
আমি ধরে নিচ্ছি সমস্ত বাগ অনুমানের কারণে ঘটেছিল। (দেখুন আমি সেখানে কী করেছি? = পি)
ড্যান_ওয়াটারওয়ার্থ

4
@ জেডজেআর: যে কারণে assertএত দুর্দান্ত। আপনার অনুমান পরীক্ষা করুন। তাদের প্রায়শই পরীক্ষা করুন।
জ্যান লিংস

@ উদ্যান_ ওয়াটারওয়ার্থ: সত্য নয়। একটির জন্য, এটি টাইপও হতে পারে।
টমাস এডিং

13

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

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

2
আমি আপনার বেশিরভাগ পোস্টে আপনার সাথে একমত হয়েছি বলে আমি মনে করি অযোগ্য unf ডিবাগার ব্যবহার না করে এটি বিকাশ সম্ভব, এটি কেবল অদক্ষ। কিছু লোক অন্যের আগে ডিবাগারগুলি সম্পর্কে শিখেন!
ক্রিসফ্লেচার

আমি "অক্ষম" এর মতো শব্দগুলিকে আকস্মিকভাবে ছুঁড়ে ফেলি না। আমি এমন কাউকে জানি যে মুদ্রণ বিবৃতি দিয়ে পুরোপুরি ডিবাগ করে এবং অন্য কেউ তাঁর অবদানের কাছাকাছি আসে না।
মাইক ডুনলাভে

2
@ মাইকডুনলাভে কি সেই ব্যক্তি কীভাবে ডিবাগার ব্যবহার করতে এবং এটি ব্যবহার না করার জন্য বেছে নিতে জানেন ? ফাইন। যদি তারা না জানে তবে আমি আমার বক্তব্যের পাশে দাঁড়িয়েছি।
ডিজেক্লেওয়ার্থ

2
আপনার পছন্দ মতো দাঁড়িয়ে থাকুন, এমন একটি সময় সহজেই আসতে পারে যখন সেই বিশেষণটি আপনার জন্য প্রয়োগ করা হতে পারে। তারপরে আপনি বুঝতে পারবেন - এটি স্কুল উঠানের জিনিস।
মাইক ডুনলাভে

9

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

এটি সর্বদা করা প্রতিরোধমূলক হতে পারে এবং যদি প্রথম কয়েকটি "অনুমান" ব্যর্থ হয় তবে অনুমান করা সম্ভবত সমস্যা সমাধানের কৌশল এবং একটি সত্যিকারের ডিবাগার ডেকে আনা উচিত Nor সাধারণত, আমি বলতে চাই যে ডিবাগারটি ব্যবহার করার সাথে কোনও ভুল নেই absolutely ।

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


8

আমি অবাক হয়েছি যে এই বিষয়ে আলোচনাটিতে "ইউনিট টেস্টিং" উল্লেখ করা হয়নি।

যেহেতু আমি পরীক্ষা-চালিত বিকাশ করি, আমি ডিবাগারে বেশি সময় ব্যয় করি না। 10 বছর আগে, আমি সঠিকভাবে ডিবাগারের মধ্য দিয়ে পদক্ষেপ নিয়েছিলাম:

  1. কোডটি লেখার পরে যাতে এটি কাজ করে তা নিশ্চিত হয়ে যায়
  2. যখন সমস্যাটি সনাক্ত করার চেষ্টা করার জন্য আমি একটি বাগ রিপোর্ট পেয়েছি

পরীক্ষিত চালিত উন্নয়নের 10 বছর পরে আমি যা পেয়েছি তা হ'ল আমি প্রোগ্রামার হিসাবে অনেক বেশি উত্পাদনশীল যদি:

  1. আমি কোডটি লেখার আগে আমি ইউনিট পরীক্ষা লিখি তা নিশ্চিত করার জন্য যে আমি এটি সঠিকভাবে লিখেছি
  2. সমস্যার প্রতিলিপি এবং ড্রিল-ডাউন করার চেষ্টা করার জন্য বাগ রিপোর্ট পাওয়ার সাথে সাথে আমি ইউনিট পরীক্ষাগুলি লিখি।

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

আমাকে এখনও মাঝেমধ্যে ডিবাগারের মধ্যে দিয়ে যেতে হবে এবং আমি এখনও মানসিকভাবে কোডটি বিশ্লেষণে নিযুক্ত হই ... তবে কেবল খুব কমই, এবং বেশিরভাগই খুব জটিল কোডের জন্য।


+1 একটি মুদ্রণ বিবৃতি যুক্ত করতে এবং পরীক্ষার পুনরায় চালনার জন্য প্রায়শই দ্রুত হয় একটি ডিবাগার ব্যবহার করুন।
উইনস্টন ইওয়ার্ট

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

7

ব্যক্তিগতভাবে, আমি এটি দ্বারা একটি ডিবাগার ব্যবহারকে হ্রাস করার চেষ্টা করি:

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

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


6

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


5

ডিবাগিং রান কোডের সময় আপনার কোডের অবজেক্ট এবং ভেরিয়েবলের অবস্থা পরীক্ষা করার জন্য খুব দরকারী সরঞ্জাম।

উপরের উত্তরে যেমন পূর্বে উল্লেখ করা হয়েছে, ডিবাগিং চূড়ান্ত সহায়ক, তবে এমন কিছু ঘটনা রয়েছে যেখানে এটি সীমাবদ্ধ।

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

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

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

এছাড়াও সমবর্তী কোডের অপ্রত্যাশিততা সমবর্তক কোড ডিবাগিংয়ে বিকাশকারীকে আরও বিভ্রান্ত করতে পারে।

উপসংহারে, আমার সৎ মতামত:

  • সম্মতিতে ব্যবহৃত হলে ডিবাগিং = "ডিবাগিং চিন্তার ধরণ" এর ফোকাস হারাতে প্রবণতা বাড়ানো

এবং

  • অন্য যে কোনও সময় = বর্ধিত ডিবাগিং উত্পাদনশীলতা খ / সি আপনার দৃষ্টি আকর্ষণ অপ্রত্যাশিত ব্রেকপয়েন্টগুলি দ্বারা বাধা হয় না (রেসের অবস্থার কারণে অপ্রত্যাশিত)।

2
সমবর্তী পরিবেশে ডিবাগিংয়ের বিষয়টি সামনে আনার জন্য +1, যেখানে ,তিহ্যবাহী ডিবাগারগুলির উপযোগিতা প্রায়শই শূন্যের নিকটে চলে যায়।
ডেসব্লিংকলাইট

4

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

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

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


4

জেনারেলাইজ করার জন্য ঘৃণা, তবে অনেক প্রোগ্রামার আমার সাথে দেখা হয়েছে যে সমস্যার সমাধান করার একমাত্র উপায় আছে (তাদের উপায়) think এটি সহজেই অনুমান করা যায় যে প্রতিটি সম্ভাব্য পরীক্ষার কথা ভাবা হয়েছে। একটি ভিন্ন দৃষ্টিভঙ্গি খুব মূল্যবান হতে পারে।

পরীক্ষা এবং ত্রুটি দ্বারা প্রোগ্রামিং কিছু দুর্দান্ত নতুন পদ্ধতির সাথে আসতে পারে এবং অন্যরা যে জিনিস মিস করে তা ধরে ফেলতে পারে।

খারাপ দিকটি সাধারণত অনেক বেশি সময় নেয়।


4

এর্ম, এটি ব্যক্তির উপর নির্ভর করে। ব্যক্তিগতভাবে, আমি নিজেকে এত বেশি ডিবাগার ব্যবহার করি না। আমি যখন মাইক্রো কন্ট্রোলারগুলি প্রোগ্রাম করি, আমি কোডটি "ডিবাগ" করার জন্য মূলত ইইপিআরএমগুলিতে এলইডি বা লেখার ডেটা ব্যবহার করি। আমি JTAG ব্যবহার করি না।

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

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


4

কোনও ডিবাগার ব্যবহার না করা এবং কোনও ডিবাগার কীভাবে ব্যবহার করতে হয় (বা প্রত্যাখ্যান) তা না করার মধ্যে পার্থক্য রয়েছে। ডিবাগার বাগ ট্র্যাকিং এবং ফিক্সিংয়ে ব্যবহার করার জন্য অনেকগুলি সরঞ্জামের মধ্যে একটি। আমি এমন বিকাশকারীদের সাথে কাজ করেছি যারা এটিকে তাদের মাথায় ধাঁধা দিতে পারে এবং অন্যরা যারা ভাবেন তারা পারে can

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

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


4

অনেক উত্তর, তবে হাইজেনবাগ সম্পর্কে কোনও উল্লেখ নেই ?!?!?!

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

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


3

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

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

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


3

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

আমি যখন কোনও পূর্ববর্তী অ্যাপ্লিকেশনটিতে একটি মূল ফাইল পেয়েছিলাম তখন আমি শেষবারটি একটি ডিবাগড ব্যবহার করি।

আমি কি একজন "ডিবাগার মিনিয়ন" হয়ে যাচ্ছি বা এই ছেলেরা "খুব কঠিন" হয়ে উঠছে?

আমরাও। তারা কেবল এমন এক ধরণের লোক যারা তাদের জীবনকে আরও শক্ত করে তুলতে পছন্দ করে তবে এটি হওয়া উচিত।


2

ডিবাগিং হ'ল একটি সরঞ্জাম যা একজন ভাল বিকাশকারী দক্ষতার সাথে ব্যবহার করা উচিত।

অবশ্যই কখনও কখনও আপনি হৃদয় দিয়ে জানতে পারবেন আপনি কোড বেসটি জানেন তবে বাগটি কোথায় থাকতে পারে। তবে আপনি কেবল কোডটি অনুসন্ধান করে একটি পেস্কি বাগ খুঁজে পেতে পুরো দিন বা সপ্তাহটি হারাতে পারেন।

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

সুতরাং আপনার প্রশ্নের জবাব দিতে - সম্ভবত তারা উজ্জ্বল প্রোগ্রামার, তবে বাগের শিকার করার সময় তাদের সমস্যা সমাধানের দক্ষতা এবং তাদের দক্ষতা খারাপ।


2

সমস্যার ক্ষেত্রের উপর নির্ভর করে। প্রোগ্রামটি যদি ছোট হয় এবং জিনিসগুলি ভালভাবে বিভক্ত হয় তবে আপনি সম্ভবত এটি দেখে তা বের করতে পারেন। প্রোগ্রামটি যদি বেশ কয়েক বছর ধরে ১০০+ লোকের একটি টিমের দ্বারা কোডের ৪.৫ মিলিয়ন লাইনের কোড হয় তবে নির্দিষ্ট বাগগুলি খুঁজে পাওয়া অসম্ভব।

উক্ত প্রোগ্রামে (সি তে) প্রশ্নযুক্ত একটি ছিল একটি মেমরি ওভাররাইট। বাগ উপস্থিত হওয়ার সাথে সাথে মেমোরি ব্রেকপয়েন্টের সাথে ডিবাগার কোডের আপত্তিকর লাইনটি সনাক্ত করে। তবে এই ক্ষেত্রে কেউ someone.৪ মিলিয়ন কোডের কোড পড়তে বা ধরে রাখতে পারে এমন কোনও উপায় নেই যার দ্বারা কেউ তাদের অ্যারেটি লিখেছিল সেই জায়গাটি চিহ্নিত করতে পারে (আরও তারা বড় প্রোগ্রামের রাষ্ট্রের জন্য মেমরির রানটাইম লেআউটটি জানতে পারে) প্রায় 10 মিনিটের ইনপুটগুলিতে এটি পৌঁছাতে লম্বা সময় লাগবে)।

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


0

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


-1

কি একগুচ্ছ বাজে কথা: "রিয়েল প্রোগ্রামারদের ডিবাগার দরকার হয় না।" পাশাপাশি এটিও বলতে পারেন যে একজন সত্যিকার প্রোগ্রামারকে কোনও আইডিই লাগবে না, কেবল আমাকে একটি নোট প্যাড এবং একটি নিস্তেজ পেন্সিল দিন। ডিবাগার হ'ল যে কোনও সরঞ্জামের মতো যা উত্পাদনশীলতাকে সহায়তা করে।

এছাড়াও, বিবেচনা করুন যে ডিবাগিং কোড দিয়ে কাজ করা প্রত্যেককেই সেই প্রশ্নের সাথে পরিচিত নয়। অনেক সময় ঠিকাদাররা এমন পরিবেশে আসে যেখানে কেবলমাত্র যা ঘটছে তা তাদের কাছে সাধারণ আদর্শ রয়েছে। এমনকি তাদের পরিবেশের বিশদ বিবরণ দেওয়া যেতে পারে - অথবা একটি 20 বছরের পুরানো স্কিমা মানচিত্র এবং তীর নামকরণ কনভেনশনগুলির গাইড (F1, F2, এবং F3 ক্ষেত্রের সাথে টেবিল X1234 এবং টেবিল X 4312 এর মধ্যে পার্থক্য বোঝার চেষ্টা করুন [হ্যাঁ, এই জাতীয় আবর্জনা বিদ্যমান] যখন আপনি নতুন হন), তবে অনেক সময় যে বর্ণনাটি ভুল হয়; অন্যথায়, কেন সেখানে একটি "রহস্য" ত্রুটি রয়েছে।

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


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