به دست آوردن همه Exceptionها در #C و یافتن همه خطاهای برنامه
1397/12/14 16:45 , میلاد صاحب نظر

به دست آوردن همه Exceptionها در #C و یافتن همه خطاهای برنامه

مدیریت Exceptionها یکی از مهم‌ترین قسمت‌های نوشتن یک برنامه نرم‌افزاری است. اصلا جالب نیست که کاربرانتان با ارورهای عجیب رو به رو شوند، یا بدتر از آن، برنامه شما دائما کرش شود.

در این پست، در این مورد صحبت خواهیم کرد که چگونه می‌توانیم همه Exceptionها را در برنامه‌های #C به دست آوریم. NET. چندین روش برای به دست آوردن Exception‌ها و مشاهدهExceptionهای مدیریت نشده برای توسعه دهنده فراهم کرده است.

سرتیترهای این پست به شرح زیر می‌باشند:

  • به دست آوردن "First Chance Exceptions"
  • مدیریت Exception در NET.
    • درج MVC، Web API، WCF و NET Core
  • رویدادهای Exception در NET Framework.
  • یافتن همه Exceptionها با Retrace و بدون تغییر کد
  • Windows Event Viewer

به دست آوردن "First Chance Exceptions"

اگر می‌خواهید تک تک Exceptionهای برنامه خود را بیابید، باید مراقب "First Chance Exceptions"ها نیز باشید. NET Framework. یک مکانیزم ساده برای توصیف هر کدام از Exceptionهایی که در کد شما به وجود می‌آیند فراهم کرده است.

این مکانیزم حتی Exceptionهایی که در اعماق کد شما پنهان شده‌اند و ممکن است هیچ جا خودشان را حتی نشان هم ندهند را نیز می‌یابد. البته از لحاظ تکنیکی شما هیچوقت نمی‌توانید آن‌ها را "به دست آورید"، شما صرف می‌توانید برای رویدادهای NET Framework. تعریف کنید که آن‌ها را لیست کند.

یافتن این Exceptionها یک روش عالی برای بهبود عملکرد و از بین بردن رفتارهای عجیب و غیرعادی برنامه است.

همچنین باید توجه کنید که first chance exceptionها هم می‌توانند مشکلات زیادی برای برنامه بتراشند. بعضی از Exceptionها اتفاق می‌افتند چون بر اساس کدی که نوشتید انتظار اتفاق افتادن آن‌ها را دارید، یا بعضی دیگر زمانی که برنامه را اجرا می‌کنید به شکل هشدارهای مختلف و گاه‌گاه خود را نشان می‌دهند.

وقتی شروع به لیست کردن این خطاها و ارورها می‌کنید، اگر این پیغام‌ها و خطاها را دیدید به هیچ وجه نهراسید.

با تعریف کد مناسب در قسمت رویدادها، می‌توانید عملا همه Exceptionها را لیست کرده و در نتیجه همه مشکلات عجیب و نهان در برنامه خود را بیابید. البته توصیه نمی‌کنیم که این کار را در تمام مدت توسعه و تولید برنامه انجام دهید، چون تا آخر کار حجم بسیار زیاد و ناتمامی از داده را به سمت شما روانه می‌کند.

بهترین زمان برای استفاده از این فن در فاز توسعه یا در زمان یافتن مشکلات غیر منتظره در فاز تولید است.

می‌توانید این مدیریت رویداد را در شروع برنامه نصب و تنظیم کنید. برای این منظور به سراغ فایل‌های Program.cs،  Startup.cs یا فایل Global.asax بروید.

مدیریت Exception در ASP.NET

در برنامه‌های تحت وب ASP.NET، اگر مراقب نباشید، کاربران شما با ۵۰۰ خطا از سطوح مختلف سرور داخلی HTTP رو به رو خواهند شد.

این که چگونه باید از این فاجعه جلوگیری ‌کنید، بستگی به این دارد که از Frameworkهای ASP.NET مختلف استفاده می‌کنید یا از ASP.NET Core. برای شروع، حتما بخش custom errors در فایل web.config خود را فعال کنید تا کاربران شما هیچگاه صفحات Exception را مشاهده نکنند.

استفاده از Global.asaxApplication_ErrorEvent

اگر برنامه شما Global.asax داشته باشد(که ضرورتا یک HttpApplication است)، باید در آن رویدادهایی حول مدیریت Exceptionها تنظیم کنید. مهم است بدانید بسته به اینکه شما از MVC، Web API، Nancy، ServiceStack، WCF یا غیره استفاده می‌کنید، ممکن است همه Exceptionها در بخش مدیریت خطای Global.asax شما ظاهر نشوند.

هر کدام از frameworkهای وب خاص ممکن است مکانیزم‌های مدیریت خطای مخصوص به خودشان را داشته باشند. در این مورد نیز در قسمت‌های بعدی صحبت خواهیم کرد.

مدیریت خطا در MVC

در MVC شما می‌توانید از HandleErrorAttribute برای مدیریت سفارشی خطا در هر عمل کنترلر MVC استفاده کنید. MVC همچنین یک رویداد OnException نیز درون Controller دارد. در کل، تا زمانی که از قابلیت مدیریت خطای جهانی فایل Global.asax برای به دست آوردن همه Exceptionها استفاده می‌کنید، نباید مشکلی برایتان پیش بیاید.

مدیریت خطا در Web API

Web API قابلیت‌های مدیریت Exception خیلی پیشرفته‌تری در اختیار شما قرار می‌دهد که باید با آن‌ها آشنایی داشته باشید.

  • Exception filter – قابلیت سفارشی سازی مدیریت خطا برای کنترلرها و اعمال خاص.
  • Exception logger – همه Exceptionهای مدیریت نشده را لیست می‌کند.
  • Exception handler – مدیریت جهانی برای سفارشی سازی عکس‌العمل برنامه در هنگام فراخوانی بخشی از API شما.

یک مثال برای استفاده از لیست کننده Exceptionهای مدیریت نشده:

حالا باید لیست کننده Exception خود را به عنوان بخشی از تنظیمات آغاز Web Api رجیستر کنید.

مدیریت خطا در WCF

همانند Web API، WCF نیز گزینه‌های سفارشی سازی زیادی برای مدیریت Exceptionها دارد. اگر از WCF استفاده می‌کنید، برای به دست آوردن بدون مشکل و آسان همه Exceptionها، باید یک IserviceBehavior و IerrorHandler نیز نصب کنید.

مدیریت خطا در ASP.NET Core

چیزهای زیادی در ASP.NET Core تغییر کرده است. در ASP.NET Core جمع آوری و به دست آوردن Exceptionهای مدیریت نشده از طریق یک ExceptionFilterAttribute انجام می‌شود. می‌توانید این اتریبیوت را به عنوان یک فیلتر جهانی رجیستر کنید و آنگاه به عنوان یک مدیریت exception جهانی عمل خواهد کرد. گزینه دیگر، استفاده از یک نرم‌افزار کمکی سفارشی سازی طراحی شده برای به دست آوردن Exceptionهای مدیریت نشده می‌باشد.

همچنین باید فیلتر خود را به عنوان بخشی از کد startup یا آغاز خود رجیستر کنید.

رویدادهای Exception در NET Framework.

NET Framework. چند رویداد فراهم می‌کند که می‌توان از آن‌ها برای به دست آوردن Exceptionهای مدیریت نشده استفاده کرد. تنها کاری که لازم است انجام دهید این است که در هنگام بالا آمدن و آغاز برنامه، آن رویدادها را در کد خود رجیستر کنید. برای ASP.NET، این کار را باید در کلاس Startup یا Global.asax انجام دهید. برای Window Application، می‌توانید آن‌ها را به چند خط اولیه کد در متد ()Main اضافه کنید.

یافتن همه Exceptionها در #C با کمک Retrace

یکی از ویژگی‌های عالی Retrace قابلیت کنترل و مدیریت خطای آن است. Retrace می‌تواند به صورت خودکار همه Exceptionهای NET. که در برنامه شما رخ می‌دهند را بدون تغییر دادن کد شما به دست آورد. Retrace نه تنها Exceptionهای مدیریت نشده را می‌یابد، بلکه همچنین همه Exceptionهای پراکنده یا first chance exception ها را نیز می‌یابد.

بهترین نکته در مورد Retrace این است که با همه انواع برنامه‌های ASP.NET کار می‌کند و سازگار است. حتی می‌توانید برای زمانی که حجم و میزان Exception برنامه زیاد می‌شود یا وقتی یک Exception جدید پیدا می‌شود، پیغام هشدار تنظیم کنید.

Retrace سه حالت ارائه می‌دهد:

  • حالت بدون Exception
  • حالت فقط Exceptionهای مدیریت نشده
  • حالت همه Exceptionهای پراکنده – اگر از این حالت استفاده کنید همه Exceptionها را می‌یابد

مشاهده Exceptionها در Windows Event Viewer

اگر برنامه شما Exceptionهای مدیریت نشده داشته باشد، ممکن است در Windows Event Viewer در زیر قسمت "Application" لیست شده باشند. این امر زمانی مفید واقع خواهد شد که نمی‌دانید چرا برنامه شما ناگهان کرش می‌شود.

مشاهده Exceptionها در Windows Event Viewer

مشاهده Exceptionها در Windows Event Viewer

Windows Event Viewer می‌تواند دو ورودی مختلف برای Exceptionهای یکسان لیست کند. یکی از ورودی‌ها دارای خطای NET Runtime. و دیگری یک خطای عمومی‌تر از Windows Application است.

مثالی از NET Runtime.:

نمونه لیست شده در زیر Application Error:

خلاصه

تدارک دیدن بهترین اعمال برای لیست کردن Exceptionها امری حیاتی برای هر برنامه نرم‌افزاری است. لیست کردن عملا چشم و گوش توسعه دهنده برنامه است. در این پست، ما چندین روش برای یافتن و به دست آوردن همه Exceptionها در #C را بررسی کردیم.

از بین همه روش‌ها، Retrace دید کامل و جامعی از عملکرد برنامه‌ها به توسعه دهندگان ارائه می‌دهد. با کمک آن می‌توانید همه Exceptionهای برنامه خود را بیابید و حتی یک trace جامع و کامل از اتفاقی که در Exception می‌افتد نیز به دست می‌آورید.

منبع: stackify 

 

 مطالب مرتبط

 مقدمه ای بر زبان برنامه نویسی #C و پلتفرم NET Framework.
 مقدمه ای بر NLog در هسته ASP.NET
 طبقه بندی زبان های برنامه نویسی

چگونه از طریق جاوا (Java)، به یک پایگاه‌داده مای‌اس‌کیوال (MySQL) متصل شویم

 LINQ(زبان جستجوی یکپارچه)

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات