বিদ্যমান কোডটি ডিবাগ করার ক্ষমতা [উন্নত] কীভাবে উন্নত করবেন


29

কর্মক্ষম বিশ্বে একটি সাধারণ কাজ বিদ্যমান, তবে বগি কোডটি নিয়ে কাজ করে। ডিবাগার হিসাবে আপনার দক্ষতা উন্নত করার জন্য কয়েকটি টিপস কি?



2
উত্তরের জন্য মূল লেখক ওয়াটারবোর্ড।
কাজ

উত্তর:


32

কিছু অনুমান করবেন না

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


2
+1 টি। একেবারে। কীভাবে কিছু জিনিস, আপনি ভেবেছিলেন যে আপনি জানেন যে আপনার উপর কৌতুক খেলতে চলেছে তাতে অবাক হওয়ার জন্য প্রস্তুত থাকুন।
অফাদার

আমার জন্য কাজ করে :)
setzamora

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

1
@ জোব: ... ঠিক আছে? আপনি কি এই মন্তব্যটি পোস্টটিতে রেখেছেন, সম্ভবত? :)
অ্যাডাম শিখুন

এই! যদি আপনি কোনও অদ্ভুত সমস্যাটি ডিবাগ করেন এবং কোডটি সূক্ষ্ম মনে হয় তবে আপনার কোডের কোনও ছোট্ট বিটকে অন্ধভাবে বিশ্বাস করা বোকামি।
ড্যান

7

ক্রমবর্ধমান পরীক্ষা করা হচ্ছে

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

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


4

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

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


4

বাইনারি বাগ চপের পরিবর্তে, ফর্মটিতে পরীক্ষা লিখুন

  • প্রদত্ত ...
  • কখন...
  • আশা ...

আপনি যা সত্য বলে ধরেছেন তার বিপরীতে অ্যাপটির কার্যকারিতা সম্পর্কে আপনি আসলে কী জানেন তা যাচাই করা।

বেশিরভাগ আইডিই পদ্ধতিগুলি নিষ্কাশন করা এবং এক্স ইউনিত পরীক্ষার স্টাবগুলি তৈরি করা সহজ করে। এটি ব্যবহার করুন।

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


2

ডিবাগিং চালিয়ে যান। আপনি যদি অনেকগুলি ডিবাগ করেন তবে আপনার উন্নতি হবে।


একেবারে ডিবাগিং নিজের মধ্যে শিল্পে বিশেষত অন্যান্য লোকের কোডটি ডিবাগ করে।
গ্রেটজি

2

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

ডিবাগিংয়ের আসল প্রক্রিয়ার জন্য:

  • ইউনিট পরীক্ষা লিখুন যদি সেগুলি ইতিমধ্যে বিদ্যমান না থাকে।
  • ইতিমধ্যে উপস্থিত না থাকলে উপযুক্ত লগিং যুক্ত করুন।
  • তারপরে ডিবাগিং ব্যবহার করুন।

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


1

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

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

আপনি যদি ডিবাগ করার সময় কোডটি সংশোধন করতে পারেন:

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

মত:

bool isLessThan5 = a < 5;
bool isGreaterThan10 = a > 10;
if ( isLessThan5 || isGreaterThan10 )
{
   // more code here
}

পরিবর্তে:

if ( a < 5 || a > 10 )
{
   // more code here
}

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


1
সাবকন্ডিশনের নামকরণের আরও একটি পদক্ষেপ প্রয়োজন, নামগুলির রিফ্যাক্টরিং যখন আপনি শর্তটি কী তা জানতে পারেন। if (tooCloseToHydrant || overTheBrink) { আপনি যখন আরও পরে শিখবেন তখন এটি হতে পারে ।

1

দুটি জিনিস, গত 22 বছরের বেশিরভাগ সময় ব্যয় করার ভিত্তিতে অন্যান্য লোকেরা কোড বজায় রেখেছেন।

আপনি কী ধরণের বাগ লিখতে চান তা বুঝতে পারেন।

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

অন্য লোকেরা আপনার মতো একই ধরণের বাগ লিখবে না।

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


আপনি কি কিছু পরিবর্তন করে কি কোডটি পুনরায় ফর্ম্যাট করেন?

@ থরবজর্ন: আমি যদি কোডটির মালিকানা নিয়ে থাকি তবে আমি মাঝে মাঝে পাঠযোগ্যতার উন্নতি করতে, তবে টাইপগুলি খুঁজে না পাওয়ার জন্য এটি করি। আকর্ষণীয় ধারণা!
বব মার্ফি

আপনাকে এটি করতে হবে না, কেবল দেখুন কী ঘটে। আমি এমন একটি রাজনীতি প্রয়োগের জন্য

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

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

1

আপনার সরঞ্জামগুলি জানুন। উদাহরণস্বরূপ, ভিজ্যুয়াল স্টুডিওর ডিবাগারটিতে ট্রেসপয়েন্টস নামে একটি দুর্দান্ত বৈশিষ্ট্য রয়েছে যা ব্রেকপয়েন্টের মতো হয় তবে আপনার কোডটি থামিয়ে দেবার পরিবর্তে ডিবাগ আউটপুটে একটি ট্রেস স্টেটমেন্ট সন্নিবেশ করে।

আপনার ডিবাগারটি কীভাবে ব্যবহার করবেন সে সম্পর্কে বই পড়া বা ক্লাস নেওয়া অত্যন্ত প্রস্তাবিত। আমি বেশ কয়েকটি ক্লাস নিয়েছি এবং জন রবিনসের কয়েকটি বই পড়েছিলাম যা একটি ডিবাগার হিসাবে আমার কার্যকারিতাটিতে একটি বড় পার্থক্য তৈরি করে।


0

কোডটি কী করার চেষ্টা করছে তা কার্যকরীভাবে বুঝুন। আপনি যদি পুরো ছবিটি জানেন না (সমস্ত পরীক্ষার ক্ষেত্রে এই কোডটি অবশ্যই পাস করতে পারে) নতুন বাগগুলি প্রবর্তন না করে সঠিকভাবে ডিবাগ করা শক্ত hard


0

স্বয়ংক্রিয় ইউনিট পরীক্ষা এবং অন্যান্য ধরণের সংহতকরণ এবং কার্যকরী পরীক্ষা লিখুন।

আপনার যত বেশি স্বয়ংক্রিয় পরীক্ষাগুলি হবে, কম ডিবাগারে আপনাকে সময় কাটাতে হবে।

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

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

ব্যতিক্রম (এবং সর্বদা একটি থাকে) হ'ল মাল্টিথ্রেডিং কোড :-)


0

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


0

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

বইটির স্লাইডগুলি অনলাইনে উপলব্ধ, তবে আমি মনে করি বইটি নিজেই পড়া সহজ।

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


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