অপ্রয়োজনীয় / এলোমেলোভাবে ঘটে যাওয়া বাগ সংশোধন করার জন্য আমি কীভাবে যোগাযোগ করব?


11

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

সময়মতো সমস্যাটি সন্ধানে কোন পরামর্শ? আমি কৌশল এখানে জিজ্ঞাসা করছি।


4
পরিস্থিতিগুলির জন্য কোডটি অনুসন্ধান করা শুরু করুন যা এই বাগটি ঘটতে দেবে (প্রায় অন্য উপায়ে এটি করার পরিবর্তে)
ইমরান ওমর বুখশ

উত্তর:


20

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

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

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

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

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

এখন আপনি এটি ঠিক করতে পারেন, এবং যুক্তিযুক্ত আত্মবিশ্বাসী হন যে এটি আপনাকে আবার কামড়ানোর জন্য ফিরে আসবে না।


10

ত্রুটি অপূরণীয় নয়। কীভাবে এটি পুনরুত্পাদন করবেন তা আপনি এখনও সন্ধান করতে পারেন নি।

কোনও বাগ এলোমেলো নয় যতক্ষণ না আপনি কিছু র্যান্ডম () স্টেটমেন্টের রিটার্ন মানের উপর ভিত্তি করে একটি ব্যতিক্রম নিক্ষেপ করছেন।

আমি জানি এটি শব্দার্থবিজ্ঞানের মতো মনে হতে পারে তবে নিজের কাছে এটি জানাতে এটি মানসিকভাবে আশ্বাস দেয়।

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

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

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

আশা করি আপনি একটি সীসা খুঁজে পেতে সক্ষম হবেন।


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

1
@ বেরিন: আমি জানি।
গিলস

"1 এর জন্য" আপনি কীভাবে এখনও এটি পুনরুত্পাদন করবেন তা সন্ধান করেননি। " সমস্ত বাগের মূল কারণ রয়েছে অন্যথায় সেগুলি ঘটবে না।
মাইক এস

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

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

5

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

ভাগ্যের কিছুটা দিয়ে আপনি এটি করে আপনি ঘটনাগুলির তথ্য ক্যাপচার করতে পারেন এবং সমস্যার দিকে ফিরে আসার উপায়টি অনুমিত করতে পারেন।


2

অটোমেশনের সাহায্য করা উচিত, যদি কখনও কখনও ব্যর্থ হয় এমন পুনরুত্পাদন করার একই পদক্ষেপগুলি হয় তবে এটি স্বয়ংক্রিয় করে এটিকে একটি লুপে রেখে দেয় put 50,000 বারে চালান এবং এটি হওয়ার খুব সম্ভবত সম্ভাবনা রয়েছে।


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

1
@ জোশ - যদি তিনি এটি পুনরুত্পাদন করতে সক্ষম না হন তবে উদাহরণস্বরূপ, এটির ডিবাগ প্রতীক সহ স্ট্যাক ট্রেস অর্জনের এটি ভাল উপায় be আমি বুঝতে পারি যে এটি একটি দুর্দান্ত প্রথম পদক্ষেপ - এটি প্রথম হাতে দেখে
কাইরেন জনস্টোন

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

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

আমি দ্বিমত পোষণ করি এবং আমি বিশ্বাস করি যে এর সমাধানের সঠিক উপায়টি বেরিনের উত্তর
জোশ কে

1

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


কোন ছিটে ..............
theringostarrs

0

সমস্যাটি কখন ঘটছে তা সনাক্ত করতে পারবেন ? যদি তা হয় তবে আপনি কি নির্ভরযোগ্যভাবে সেই সময়ে সিস্টেমের অবস্থা সম্পর্কে তথ্য ছুঁড়ে ফেলতে পারেন?

যদি এই উভয় প্রশ্নের উত্তর হ্যাঁ হয়, আপনার কোডটি ত্রুটি আসলে যখন ঘটেছিল ঠিক তখন যতটা তথ্য লগ করতে পারে তা ব্যবহার করুন wait

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

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