যদি (মিথ্যা == সত্য) যদি ব্যতিক্রম ছোঁড়ার ভিতরে থাকে তখন ব্লক কার্যকর করে


152

আমার একটি বরং অদ্ভুত সমস্যা হচ্ছে যা ঘটছে।

এটি আমার কোড:

private async Task BreakExpectedLogic()
{
    bool test = false;
    if (test == true)
    {
        Console.WriteLine("Hello!");
        throw new Exception("BAD HASH!");
    }
}

অত্যন্ত সহজ মনে হয়, এটা আঘাত করা উচিত নয় Console.WriteLineবা throw। কিছু কারণে এটি সর্বদা আঘাত করছে throw

আমি যদি throwতার নিজস্ব পদ্ধতিতে স্থানান্তর করি তবে এটি ঠিক আছে works আমার প্রশ্ন হ'ল এটি কীভাবে ifব্লকটিকে উপেক্ষা করে এবং মারছে throw new Exception:

এখানে কিছু প্রমাণ

সম্পাদনা 1: আমি স্বাক্ষরটি অন্তর্ভুক্ত করার জন্য আমার কোড আপডেট করেছি, আমি এই সমস্যার সাথে সম্পর্কিত না সমস্ত কিছু সরিয়েছি এবং এটি চালিয়েছি, এটি এখনও ঘটে।


5
@ টিমশ্মেল্টার ছবিটি এটি ডিবাগ হচ্ছে, হলুদ হাইলাইটটি কোডটি যেখানে রয়েছে
জর্জ

5
আমি সবেমাত্র একটি ফাঁকা কোর কনসোল অ্যাপ্লিকেশন তৈরি করেছি, আপনার কোডটি Mainএবং .... আশ্চর্য, নোরপ্রোতে পেস্ট করেছি। হয় আপনি ভুল করেছেন বা আপনি কিছু গুরুত্বপূর্ণ বিবরণ মিস করেছেন।
জামেয়েক

16
এটি কি কোনও asyncসুযোগেই কোনও পদ্ধতিতে? কারণ এটি স্ট্যাকওভারফ্লো
ম্যাথু ওয়াটসন

7
@ জর্জ: এখনও কোনও প্রমাণ নেই কারণ আপনি হয়ত পুরানো ডিবাগ প্রতীক ব্যবহার করতে পারেন। ডিবাগ মোডে পুনরায় কম্পাইল করুন এবং তারপরে আবার শুরু করুন।
টিম শ্মেলেটার

4
@ টিমশ্মেলটার আমি প্রকল্পটি পুনরায়
জর্জ

উত্তর:


176

এটি asyncপদ্ধতিতে বাগ হিসাবে মনে হয় , কোডটি আসলে কার্যকর করা হয় না তবে throwবিবৃতি সহ লাইনে ডিবাগার ধাপ । এই লাইনের throwঅভ্যন্তরে স্টেটমেন্টের আগে যদি কিছু লাইন কোড থাকে তবে ifডিবাগারটি কেবলমাত্রthrow বিবৃতি সহ লাইনে চলে যায় ।

এছাড়াও, আপনি যদি ভেরিয়েবল ব্যবহার না করেন - if (false)বা if (true == false)তারপরে কোডের সঠিক লাইনের ডিবাগার পদক্ষেপগুলি - সমাপ্তি কোঁকড়া ধনুর্বন্ধনী থেকে।

এই বাগটি @ ম্যাথিউ ওয়াটসন ভিজ্যুয়াল স্টুডিও দলে পোস্ট করেছেন (লিঙ্কটি এখন উপলভ্য নয়)।

এছাড়াও, অনুরূপ প্রশ্ন দেখুন - async পদ্ধতিতে শর্ত পরীক্ষা করুন

সম্পাদনা (2017/10/06):

নেট ফ্রেমওয়ার্ক 4.7 ব্যবহার করে ইস্যুটি ভিএস 2017 15.3.5 এ পুনরুত্পাদন করা যাবে না। দেখে মনে হচ্ছে ভিএস টিম এই সমস্যাটি স্থির করেছে।


20
আপনাকে ধন্যবাদ, না জেনে এটি ডিবাগারে একটি বাগ যা আমি সম্ভবত পাগল হয়ে যাব।
জর্জ

121
ডিবাগারে একটি বাগ? কত মেটা। :) (গান গাওয়া আমি এর আগে কখনও মেটা বাগ পাইনি ... )
সিম্বা

3
@ জর্জি আশা করি আপনি আপত্তি করবেন না, আমি আপনার নমুনা নিয়েছি এবং এটি ব্যবহার করে একটি কনসোল অ্যাপ তৈরি করেছি এবং এটি রোমানের সাথে যুক্ত হওয়া ভিএস ইস্যুতে সংযুক্ত করেছি।
ওবিসিডিয়ান ফিনিক্স

5
@ সিম্বা: আমাকে বলুন আপনি নিজেকে ডিবাগ করার জন্য কখনও কোনও ডিবাগার ব্যবহার করেন নি।
জোশুয়া

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

10

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

// if (...) {
0001: jne 0006
...
0006: jmp 0007
// }
0007: ret

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

সুতরাং আমি অনুমান করব যে এই বাগটি জেআইটি সংকলক সম্পর্কিত হতে পারে।

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