আপনার সবচেয়ে জটিল বাগের শিকার কী ছিল এবং কীভাবে আপনি এটি খুঁজে পেয়েছিলেন এবং এটি হত্যা করেছিলেন?


31

এটি একটি "জ্ঞান ভাগ করুন" প্রশ্ন। আমি আপনার সাফল্য এবং / বা ব্যর্থতা থেকে শিখতে আগ্রহী।

তথ্য যে সহায়ক হতে পারে ...

পটভূমি:

  • প্রসঙ্গ: ভাষা, প্রয়োগ, পরিবেশ ইত্যাদি
  • বাগটি কীভাবে চিহ্নিত করা গেল?
  • কে বা কোনটি বাগ চিহ্নিত করল?
  • বাগটি কীভাবে জটিল হয়েছিল?

শিকার

  • আপনার পরিকল্পনা কি ছিল?
  • আপনি কোন সমস্যার মুখোমুখি হয়েছিলেন?
  • আপত্তিজনক কোডটি শেষ পর্যন্ত কীভাবে পাওয়া গেল?

হত্যা.

  • ঠিক কত জটিল ছিল?
  • আপনি কীভাবে ঠিক করার সুযোগটি নির্ধারণ করলেন?
  • সংশোধনের সাথে কত কোড জড়িত ছিল?

পোস্টমর্টেম।

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

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

উত্তর:


71

এটি আসলে আমাদের আবেদনের তৃতীয় পক্ষের চিত্র দর্শকের উপ-উপাদানে ছিল।

আমরা দেখতে পেলাম যে আমাদের অ্যাপ্লিকেশনটির 2-3 জন ব্যবহারকারী প্রায়শই চিত্র দর্শকের উপাদানটি ব্যতিক্রম করতে এবং ভয়াবহভাবে মারা যায়। তবে, আমাদের কয়েক ডজন অন্যান্য ব্যবহারকারী ছিল যারা বেশিরভাগ কাজের দিনের জন্য একই কাজের জন্য অ্যাপ্লিকেশনটি ব্যবহার করেও সমস্যাটি দেখেনি saw এছাড়াও বিশেষ করে একজন ব্যবহারকারীর উপস্থিতি ছিল যা অন্যান্যদের চেয়ে অনেক বেশি ঘন ঘন পেয়েছিলেন।

আমরা স্বাভাবিক পদক্ষেপগুলি চেষ্টা করেছি:

(1) তাদের অন্য কম্পিউটারের সাথে কম্পিউটারগুলি স্যুইচ করা ছিল যার কম্পিউটার / কনফিগারেশনটি বাতিল করতে কখনও সমস্যা হয়নি। - সমস্যা তাদের অনুসরণ করেছে।

(২) তাদের যদি অ্যাপ্লিকেশনটিতে লগইন করে এবং এমন একটি ব্যবহারকারী হিসাবে কাজ করে যা সমস্যা কখনও দেখেনি। - এখনও সমস্যা তাদের অনুসরণ করে।

(৩) ব্যবহারকারীরা কোন চিত্রটি দেখছিল এবং তাদের প্রতিবেদনটি তাড়াতাড়ি হাজারে বারে বারে বারে দেখার জন্য একটি পরীক্ষার জোতা স্থাপন করেছে। সমস্যাটি জোতাতে নিজেকে উপস্থাপন করেনি।

(৪) কোনও বিকাশকারী ব্যবহারকারীদের সাথে বসে সারা দিন তাদের দেখতেন। তারা ত্রুটিগুলি দেখেছিল, কিন্তু তাদের কারণ হিসাবে সাধারণের বাইরে তাদের কিছু করার লক্ষ্য রাখেনি।

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

তিনি বুঝতে পেরেছিলেন যে সমস্ত "ত্রুটি ব্যবহারকারী" বাম হাতে রয়েছে, এবং এই সত্যটি নিশ্চিত করেছেন। কেবল বাম-হাতের ব্যবহারকারীরা ত্রুটিগুলি পেয়েছিল, কখনই রিয়াইটস নয়। তবে কীভাবে বাম হাতে রেখে বাগের কারণ হতে পারে?

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

দেখা গেল যে কেবলমাত্র ত্রুটিটি ঘটেছে যদি আপনি চিত্রটি দর্শকের পিক্সেলের ডানদিকের কলামে মাউসটিকে সরানো হয় যখন এটি একটি নতুন চিত্র লোড করার সময় ছিল (ওভারফ্লো ত্রুটি কারণ বিক্রেতাকে মাউসওভার ইভেন্টের জন্য 1-অফ গণনা ছিল)।

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

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

এটি এখন থেকে দেব দলে কিংবদন্তি হিসাবে "বাম হাতের বাগ" নামে পরিচিত ছিল


14
এটিই আমি সবচেয়ে খারাপভাবে শুনেছি।
নাথান টেইলর

9
যদিও এটির সমাধানকারী লোকটির মধ্যে এটি একজন নায়ককে তৈরি করেছিল।
জনএফএক্স

2
বাহ, এখন এটি বাগের হেক!
মিচেল বিক্রেতারা

3
দুর্দান্ত খুঁজে! সুন্দর গল্প.
টুন ক্রিজ্তে

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

11

এটি অনেক দিন আগে (1980 এর দশকের শেষের) from

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

সঞ্চিত্রে সত্তার ধরণ (লাইন, চাপ, পাঠ্য ইত্যাদি) 4096 (আমার মনে হয়) দ্বারা গুণিত হয়েছিল stored এছাড়াও এই মানটি একটি মুছে ফেলা আইটেমটি ইঙ্গিত করতে অস্বীকার করা হয়েছিল। সুতরাং যে ধরণের আমাদের কোড ছিল তা পেতে:

type = record[1] MOD 4096

প্রত্যেকটি মেশিনে এটির জন্য ± 1 (একটি লাইনের জন্য), ± 2 (একটি চাপের জন্য) ইত্যাদি দেওয়া হয়েছিল এবং আমরা মুছে ফেলা হয়েছে কিনা তা দেখতে সাইনটি পরীক্ষা করতে পারি।

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

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

আমি শেষ পর্যন্ত আবিষ্কার করেছি যে এটি ছিল কারণ প্রতিটি অন্যান্য নির্মাতারা বাস্তবায়িত করেছিল MODযাতে এইচপি -4096 MOD 4096ফলে -1গাণিতিকভাবে সঠিকভাবে প্রয়োগ করে যাতে -4096 MOD 4096ফলস্বরূপ ঘটে -4097

আমি পুরো কোড বেসটি দিয়ে মানটির চিহ্নটি সংরক্ষণ করে এবং ইতিবাচক করার আগে MODএবং সাইন মান দ্বারা ফলাফলকে গুণ করার আগে শেষ করেছি ।

এটি বেশ কয়েক দিন সময় নিয়েছে।


3
বছরের পর বছর ধরে সম্ভবত আরও কঠিন বাগের শিকার হয়েছে, তবে এইটি আমার মনে 20 বছরেরও বেশি সময় ধরে আটকে আছে!
ক্রিসএফ

7

বাহ, এখানে ভাল পড়া!

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

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

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

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

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

পাঠ শিখেছে: 1) সেরা সংকলকগুলি ব্যবহার করুন, যেখানে কম্পিউটার সায়েন্স কীভাবে চেক করতে জানে এবং "2" সাধারণ স্পষ্ট বিষয় সম্পর্কে প্রশ্ন জিজ্ঞাসা করা, বা কমপক্ষে তাদের যথাযথ কার্যকারিতা যাচাই করার সাথে সাথে "সেরা" সংজ্ঞায়িত করা হয় as

সেই থেকে সমস্ত কঠিন বাগগুলি সত্যই কঠিন ছিল, কারণ আমি সাধারণ জিনিসগুলি প্রয়োজনীয়গুলির চেয়ে আরও ভালভাবে পরীক্ষা করতে জানি।

পাঠ 2 আমি এখনই নির্ধারিত সবচেয়ে শক্ত ইলেকট্রনিক্স বাগের ক্ষেত্রেও প্রয়োগ করি, তুচ্ছ ফিক্স সহ, তবে বেশ কয়েকটি স্মার্ট ইই কয়েক মাস ধরে স্ট্যাম্পড ছিল। তবে এটি কোনও ইলেক্ট্রনিক্স ফোরাম নয়, তাই আমি এর বেশি আর বলব না।


অন্যত্র ইলেকট্রনিক্স বাগ এবং এখানে একটি লিঙ্ক পোস্ট করুন!
tgkprog

6

নরক থেকে নেটওয়ার্কিং ডেটা রেসের শর্ত

আমি অন্য কোনও বিকাশকারীর দ্বারা লিখিত সত্যিকারের পুরানো (এনকোর 32/77) ওয়ার্কস্টেশনে অনুরূপ অ্যাপ্লিকেশনটির সাথে কাজ করার জন্য একটি নেটওয়ার্কিং ক্লায়েন্ট / সার্ভার (উইন্ডোজ এক্সপি / সি #) লিখছিলাম।

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

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

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

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


সমস্যাটি নিখুঁত করার জন্য আমি একটি দোলক মানকে বেছে নিয়েছি:

  • আমি টাচস্ক্রিন অ্যাপটি চেক করেছি, এটি দোদুল্যমান ছিল
  • আমি ডাটাবেসটি পরীক্ষা করেছিলাম, দোদুল্যমান
  • আমি দোলা দিয়ে কমস অ্যাপ্লিকেশনটি চেক করেছি

তারপরে আমি ওয়্যারশার্ক ভেঙে প্যাকেট ক্যাপচারগুলি ম্যানুয়ালি ডিকোডিং শুরু করি। ফলাফল:

  • দোলন নয় তবে প্যাকেটগুলি ঠিক দেখাচ্ছে না, খুব বেশি ডেটা ছিল।

আমি কোনও ত্রুটি / ত্রুটি খুঁজে না পেয়ে কমস কোডের প্রতিটি বিবরণে একশো বার পদবিন্যাস করেছি।

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

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

সুতরাং, যদি কোনও মান ডাটা অ্যারের ৮০ পজিশনে থাকে এবং অনুরোধকৃত মানগুলির তালিকাটি ৮০ টিরও কম হয়ে যায় তবে সেই একই মানটি নতুন তালিকায় অন্তর্ভুক্ত থাকে, তবে উভয় মান সেই নির্দিষ্ট বাফারের জন্য ডেটা বাফারে উপস্থিত থাকতে পারে নির্দিষ্ট সময়.

যখন ইউআই মানটির জন্য অনুরোধ করছিল তখন সময় স্লাইসের উপর নির্ভর করে ডাটাবেস থেকে পড়া মানটি।


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


পাঠ শিখেছি:

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

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

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

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


5

পটভূমি

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

পোকাটি

  • যখন প্রোডাকশনে স্থানান্তরিত হয় সার্ভারটি এলোমেলো সময়ের জন্য সূক্ষ্মভাবে চালিত হয় তখন দ্রুত ডিগ্রি করা শুরু করে এবং বক্স সিপিইউকে 100% এ নিয়ে যায়।

আমি এটি কিভাবে খুঁজে পেয়েছি

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

তারপরে আমি নিশ্চিত যে আমার কাছে একটি থ্রেড বিতর্ক সমস্যা ছিল। আমি আমার ডেডলকগুলি পরিস্থিতি তৈরির চেষ্টা করার চেষ্টা করে ডিবাগ-এ পরিস্থিতি তৈরির চেষ্টা করার সরঞ্জাম তৈরি করেছি। ক্রমবর্ধমান পরিচালনার হতাশার সাথে আমি আমার সহকর্মীদের দিকে ফিরে গেলাম কীভাবে প্রকল্পটি স্ক্র্যাচ থেকে সার্ভারকে এক থ্রেডে সীমাবদ্ধ করার জন্য প্রকল্পটি পুনরায় চালু করা থেকে শুরু করার পরামর্শ দেওয়া হয়েছিল। 1.5 সপ্তাহ

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

দীর্ঘ দীর্ঘ একটি ছোট অভিধান যা এক্স থ্রেড ত্রুটি লিখতে লগটি সিংক্রোনাইজ করা হয়নি তার সন্ধান করে।


3

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

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

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

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

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

শেষ পর্যন্ত সমস্যাটির কারণগুলির সঠিক সেটটি নির্ধারণ করতে প্রায় দুই সপ্তাহ লেগেছিল।


2

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

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


দুটি বাগ রয়েছে যা আমাদের বিরক্ত করেছিল এবং আমাদের প্রচুর সময় হারাতে পেরেছিল, সত্যই যুক্তিযুক্ত:

এলোমেলোভাবে, একটি কম্পিউটার তার লোকালহোস্ট আইপিটি দূরবর্তী আইপিটির পরিবর্তে ভাগ করে নিচ্ছে।

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

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


এবং এখন আরও বিরক্তিকর:

এলোমেলোভাবে, প্যাকেটের প্রবাহটি এলোমেলোভাবে বিরতি দেয়।
যখন পরবর্তী ক্লায়েন্ট সংযুক্ত হয় এটি অবিরত থাকবে ...

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

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

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


পাঠ শিখেছি:

  • নেটওয়ার্ক ডিভাইসগুলির ক্রমের মতো বোকা অনুমানগুলি করবেন না।

  • ফ্রেমওয়ার্কগুলি সর্বদা তাদের কাজ (বাস্তবায়ন বা ডকুমেন্টেশন) সঠিকভাবে করে না।

  • কোডটিতে পর্যাপ্ত আউটপুট সরবরাহ করুন, যদি অনুমতি না দেওয়া হয় তবে কোনও ফাইলে বর্ধিত বিবরণ লগ করতে ভুলবেন না।

  • যখন কোডটি ইউনিট পরীক্ষা করা হয়নি (কারণ এটি খুব কঠিন) জিনিসগুলিকে কাজ করতে অনুমান করবেন না।


1
ওয়্যারশার্ক (বা অনুরূপ সরঞ্জাম) ব্যতীত নেটওয়ার্কিংয়ের সমস্যাগুলি সম্বোধন করা / এটিপরিচয়টি বীরত্বপূর্ণ।
ইভান প্লেস

2

আমি এখনও আমার সবচেয়ে কঠিন বাগের শিকারে আছি। এটি কখনও কখনও এটিগুলির মধ্যে একটি এবং কখনও কখনও এটি বাগগুলি নয়। পরের দিন সকাল :10:৩০ এ আমি কেন এখানে আছি তা বলুন।

পটভূমি:

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

শিকার

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

হত্যা.

  • ঠিক কত জটিল ছিল?
    • খুব
  • আপনি কীভাবে ঠিক করার সুযোগটি নির্ধারণ করলেন?
    • কোন সুযোগ ছিল না ... এটা সর্বত্র ছিল
  • সংশোধনের সাথে কত কোড জড়িত ছিল?
    • এটার সবগুলো? আমি মনে করি না যে এখানে কোনও ফাইল ছিল না

পোস্টমর্টেম।

  • প্রযুক্তিগতভাবে মূল কারণটি কী ছিল? বাফার অতিক্রম
    • খারাপ কোডিং অনুশীলন
  • 30,000 ফুট থেকে মূল কারণটি কী ছিল?
    • আমি বরং বলব না ...
  • প্রক্রিয়াটি শেষ পর্যন্ত কতটা সময় নিয়েছে?
    • সব সময় প্রবেশ করুন এবং একটি দিন
  • এখানে কোনও বৈশিষ্ট্য বিরূপভাবে প্রভাবিত হয়েছিল?
    • বৈশিষ্ট্য? অথবা এটি একটি বাগ সংশোধন করা হয়?
  • কোন পদ্ধতি, সরঞ্জাম এবং প্রেরণাগুলি আপনি বিশেষভাবে সহায়ক বলে মনে করেছিলেন? ... মারাত্মকভাবে অকেজো?
  • আবার সব করতে পারলে? ............
    • সিআরটিএল + একটি ডেল

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

2

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

পিডিপি-১১-এ এই সংখ্যার পাশের ছোট্ট বিন্দুটি এটি 8 এর পরিবর্তে 10 ভিত্তি করে তোলে 8।

এটি এখনও আমার পক্ষে দাঁড়িয়েছে কারণ ক্ষুদ্র পরিমাণে 4 পিক্সেল আকারের সংখ্যার পরিমাণের ক্ষতির পরিমাণ। তাহলে উপসংহার কী? পিডিপি -11 বিধানসভায় কোড করবেন না।


2

মূল-ফ্রেম প্রোগ্রাম কোনও কারণ ছাড়াই কাজ বন্ধ করে দিয়েছে

আমি সবেমাত্র এটি অন্য একটি প্রশ্নে পোস্ট করেছি। এখানে পোস্ট দেখুন

এটি ঘটেছিল কারণ তারা মেইন-ফ্রেমে সংকলকের একটি নতুন সংস্করণ ইনস্টল করেছে।

06/11/13 আপডেট করুন: (মূল উত্তরটি ওপি দ্বারা মুছে ফেলা হয়েছিল)

আমি এই মূল-ফ্রেমের অ্যাপ্লিকেশনটি উত্তরাধিকার সূত্রে পেয়েছি। একদিন, পরিষ্কার নীলের বাইরে এটি কাজ করা বন্ধ করে দিয়েছে। এটাই ... পুফ এটা ঠিক থেমে গেছে।

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

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

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

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

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

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

পাঠ আমি এর কাছ থেকে শিখেছি ... সর্বদা, সর্বদা, সর্বদা পৃথক এবং শর্তগুলি এবং OR শর্তগুলি যখন একে অপরের সাথে কনজাকশনে ব্যবহৃত হয় তখন প্যারেন্স ব্যবহার করে।


পোস্টে আপনার লিঙ্ক পয়েন্টগুলি সরানো হয়েছে - উত্তরটি আপডেট করার বিষয়ে আপনি কি আপত্তি জানবেন?
gnat

1
@ গ্যানাট - এটি আর্কাইভ.org এ পাওয়া গেছে :)
মাইকেল রিলে - এ কেএ গনি

1

পটভূমি:

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

শিকার

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

হত্যা.

  • জটিলতা ঠিক করুন: সংকলিত টেম্পলেটগুলিতে স্যুইচিং
  • কোড আক্রান্ত: কিছুই নয়, বিল্ড প্রক্রিয়ায় একটি সাধারণ পরিবর্তন

পোস্টমর্টেম।

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

1

সবচেয়ে শক্ত আর কখনও মারা যায় নি কারণ কারখানায় সম্পূর্ণ উত্পাদনের পরিবেশ ব্যতীত এটি কখনও পুনরুত্পাদন করা যায় না।

আমি যে ক্রেজিস্টটিকে মেরেছিলাম:

অঙ্কনগুলি ছদ্মবেশে মুদ্রণ করছে!

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

কোডটি রোল করুন, সমস্যা এখনও আছে।

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

এটির চেয়ে বেশি উদ্বেগজনক তবে এটি কেবল আমার বাক্সে থাকায় আমি প্রথমে রাখব না:

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

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

অপরাধী: দুজন ছিল।

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

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


1

এটি কেবলমাত্র একটি সরল বাগ যা কোনওভাবে আমার জন্য দুঃস্বপ্নে পরিণত হয়েছিল।

পটভূমি: আমি নিজের অপারেটিং সিস্টেম তৈরির জন্য কাজ করছিলাম। ডিবাগিং খুব কঠিন (আপনার কাছে থাকা স্টেটমেন্টগুলি সমস্ত কিছুই, এবং কখনও কখনও এমনও হয় না)

বাগ: ব্যবহারকারীমোডে দুটি থ্রেড সুইচ না করে এটির পরিবর্তে সাধারণ সুরক্ষা ত্রুটি হবে।

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

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

সমাধান: hltনির্দেশিকাটি সরান :) এটি সরানোর পরে, সবকিছু মসৃণভাবে কাজ করেছিল worked

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

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