নিক্ষেপকারী এবং ধরা পড়লে সেই ব্যতিক্রম থেকে ডিবাগারটি বন্ধ করবেন না


91

সরঞ্জাম / ব্যাতিক্রমগুলিতে, আমি একটি বিকল্প সেট করেছি যে কোনও ব্যতিক্রম নিক্ষেপ করা হলে ডিবাগার থামবে। ধরা পড়ে কিনা।

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

উদাহরণ: আমি 344 লাইনে নালারফেরেন্স ব্যতিক্রম (যা ধরা পড়ে) উপেক্ষা করতে চাই। আমি অন্য সমস্ত ব্যতিক্রম থামাতে চাই


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

সমস্যাটি এখানে: স্ট্যাকওভারফ্লো.
com

4
@ টানাসাসিয়াস - +1 আমি বেশিরভাগ ক্ষেত্রেই একমত, ব্যতিক্রমগুলি কোনও যৌক্তিক সিদ্ধান্তের পক্ষে সবচেয়ে ভাল উপায় নয়; তবে কিছু ক্ষেত্রে যেমন হ্যান্ডলিং ব্যতিক্রমগুলি ডিসরিয়ালাইজ করা যখন কখনও কখনও অনিবার্য হয় তাই থ্রোক> ক্যাচ> হ্যান্ডেলটি একমাত্র যুক্তিসঙ্গত বিকল্প।
jpierson

4
@ এবং দুঃখিত আমার খারাপ। একসাথে একাধিক ট্যাব সংযোজন দক্ষ, তবে সর্বদা নির্ভুল নয়।

4
@ টানাসাসিয়াস: প্রতিক্রিয়াতে নিজের ছুঁড়ে ফেলার আগে আপনাকে এখনও একটি কাঠামোগত ব্যতিক্রম ধরা থাকতে পারে। আপনার পরামর্শ সর্বদা সম্ভব হয় না।
ড্যান পুজে

উত্তর:


40

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


31
ম্যালিংয়ের উত্তর এবং আমার অভিজ্ঞতা থেকে এই উত্তরটি ভুল বলে মনে হচ্ছে। DebuggerStepThroughঅ্যাট্রিবিউট প্রথম সুযোগ ব্যতিক্রমসহ ডিবাগার আচরণ প্রভাবিত করে না।
মাইকেল পেট্রোটা

4
@ টিম, আমি পরীক্ষা করেছি এবং এটি থামছে না। : আমার উত্তর চেকআউট stackoverflow.com/questions/1420390/3455100#3455100
কামিজ Weitzhandler

4
নিখরচায় ব্যতিক্রমগুলির জন্য খাঁটি .NET 4.0 এবং সিলভারলাইট 4 কোডের জন্য V12010 এ +1 কাজ করে।
মাইক পোস্ট

6
গুরুত্বপূর্ণ দ্রষ্টব্য: এটি অ্যাসিঙ্ক-অপেক্ষার প্রকারের পদ্ধতিগুলির জন্য কাজ করে না। আরও এখানে
i3arnon

8
এমএসডিএন হিসাবে, DebuggerStepThroughবৈশিষ্ট্যটির সিএলআরটির কোনও অর্থ নেই। এটি ডিবাগার দ্বারা ব্যাখ্যা করা হয়। দেখে মনে হচ্ছে এটি নির্ভরযোগ্যভাবে বিভিন্ন পরিস্থিতিতে কাজ করে না এবং এটি DebuggerHiddenনির্ভরযোগ্যভাবে স্ট্যাকওভারফ্লো.com
এরিক জে

65

DebuggerHidden তোমার বন্ধু!

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

VS2010 এ পরীক্ষিত এবং দুর্দান্ত কাজ করে।

যদিও DebuggerStepThroughকিছু নির্দিষ্ট ডিবাগার সংস্করণের জন্য কাজ মনে হয়, DebuggerHiddenউভয় উত্তর মন্তব্যের উপর নির্ভর করে পরিস্থিতিতে বৃহত্তর পরিসর জন্য কাজ বলে মনে হয়।

নোট করুন যে উভয় বিকল্প বর্তমানে পুনরাবৃত্তকারী ব্লক পদ্ধতিতে বা async / প্রতীক্ষিত পদ্ধতির সাথে কাজ করে না । এটি ভিজ্যুয়াল স্টুডিওর পরবর্তী আপডেটে স্থির করা যেতে পারে।


VS2008 এ কাজ করা। আপনাকে এটিকে ক্যাচ ব্লক সহ পুরো পদ্ধতিতে প্রয়োগ করতে হবে, বা আপনি অন্য কোথাও ভেঙে যেতে পারেন
মার্ক হিথ

4
আমি সেই পদ্ধতির সাথে সেই বৈশিষ্ট্যটি যুক্ত করেছি এবং ডিবাগার তার পরিবর্তে কেবল কলিং মিথকে থামিয়ে দিয়েছিল। আমি কিছু অনুপস্থিত করছি?
ডুগাল

4
এটি এমনই হওয়া উচিত। এড়াতে, আপনাকে এই ব্যতিক্রমটি পরিচালনা করতে হবে ... অথবা বিকল্পভাবে কলার পদ্ধতিটিও চিহ্নিত করুন DebuggerHidden...
শিমি ওয়েটস্যান্ডলার

4
দ্রষ্টব্য, ব্যর্থতা ভাঙ্গা এড়াতে ডিবাগারস্টেপ বৈশিষ্ট্যটি যথেষ্ট হওয়া উচিত। ডিবাগারহিডেন ডিবাগারনউজারকোড এবং ডিবাগারস্টেপ থ্রু অ্যাট্রিবিউট উভয়ের সংমিশ্রণের মতো কাজ করে।
jpierson


14

ডিবাগারস্টেপ থ্রুটি হ'ল ডিবাগকারীকে এমন পদ্ধতিতে ভাঙ্গতে রোধ করতে ব্যবহার করা হয় যেখানে চেষ্টা / ধরা আছে।

তবে এটি কেবলমাত্র তখনই কার্যকর হয় যদি আপনি ভিজ্যুয়াল স্টুডিওর ডিবাগিং বিকল্পগুলির (মেনু সরঞ্জাম / বিকল্পগুলি, নোড ডিবাগিং / জেনারেল) সাধারণ সেটিংসে "জাস্ট মাই কোড (কেবলমাত্র পরিচালিত) সক্ষম করুন" বিকল্পটি চেক না করে ...

এই বৈশিষ্ট্য সম্পর্কে আরও তথ্য http://abhijitjana.net/2010/09/22/tips-on-debugging- using-debuggerstepthrough- attribute/ এ

ডিবাগারহিডন কেবলমাত্র ব্যতিক্রমটি ছুঁড়ে ফেলেছে এমন পদ্ধতিটি প্রদর্শন করতে ডিবাগারকে কেবলমাত্র আটকাবে। পরিবর্তে, এটি স্ট্যাকের প্রথম পদ্ধতিটি দেখায় যা সেই বৈশিষ্ট্যের সাথে চিহ্নিত নয় ...


4
নোট করুন যে এটি আর ভিএস 2015-এ ডিফল্টরূপে কাজ করে না, কীভাবে এটি সক্ষম করবেন তার জন্য ভিএস ব্লগটি দেখুন
bhh

দুঃখের বিষয় VS 2015 এর চারপাশের কাজগুলি ভিএস 2019 এর জন্য কাজ করে না
জোনাথন অ্যালেন

13

অন্যান্য উত্তরে উল্লিখিত বৈশিষ্ট্যগুলি (এবং অন্যান্য হিসাবে যেমন DebuggerNonUserCodeগুণাবলী) ভিজ্যুয়াল স্টুডিও 2015-এ ডিফল্ট হিসাবে একইভাবে আর কাজ করে না The পারফরম্যান্স বর্ধন বন্ধ করতে তাদের আচরণ পরিবর্তন করে যা আপনার একটি রেজিস্ট্রি সেটিংস পরিবর্তন করতে হবে:

reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1

আরও তথ্য ভিজ্যুয়াল স্টুডিও ব্লগে পাওয়া যাবে ।

(এটি সম্ভবত শীর্ষ উত্তরের একটি মন্তব্য হওয়া উচিত তবে আমার কাছে যথেষ্ট প্রতিনিধি নেই)


3

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

যদি আপনার নিজের কোডটি ব্যতিক্রমটিকে প্রশ্নে ফেলে দেয় তবে আমি এটিকে একটি কাস্টম ব্যতিক্রম করব, যা কিছু উপযুক্ত।

NullReferencesException হিসাবে সিস্টেম এক্সপেশনগুলি অক্ষম করা পুরো সিস্টেমকে প্রভাবিত করবে, যা অবশ্যই বিকাশের সময় কাম্য নয়।

মনে রাখবেন যে ব্যতিক্রমগুলির জন্য দুটি ধরণের বিরতিমূলক আচরণ রয়েছে:

  • নিক্ষিপ্ত: নির্বাচিত হলে, এই ধরণের ব্যতিক্রম ছোঁড়ার সাথে সাথে বিরতি
  • ব্যবহারকারী-না-ছাঁটাই: নির্বাচিত হলে, কেবলমাত্র বিরতি যদি এই ধরণের ব্যতিক্রম চেষ্টা / ক্যাচ দ্বারা পরিচালিত না হয়।

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


4
ভিজ্যুয়াল স্টুডিও ২০১০-এর কোনও পদ্ধতির সাথে ডিবাগারস্টেপ থ্রি অ্যাট্রিবিউট যুক্ত করা ডিবাগটিকে পদ্ধতিটির দ্বারা অবিবাহিত ব্যতিক্রম থামানো থেকে বিরত রাখবে।
টিম মারফি

আমি পরীক্ষা করেছি এবং এটি প্রতিরোধ করে না; এটি এখনও থামে
শিমি ওয়েটজ্যান্ডলার

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