هنگامیکه خطاهای غیر منتظرهای در برنامهی مدیریت شدهی شما رخ میدهند، شما اطلاعات کمی را در مورد این مساله دارید. اگرچه شما میتوانید تا حدودی جلوی این نوع خطاهای غیرمنتظره را با ابزارهای خطایابی و یا لاگر، رصد کنید ولی همیشه اینطور نیست؛ در این حال ذخیره، تجزیه و تحلیل Dumpهای حافظه، ممکن است آخرین گزینه برای شما باشد. خوشبختانه ویژوال استودیو، ابزاری عالی برای تجزیه و تحلیل Dumpهای حافظه است! در این مطلب به شما نشان میدهیم که چگونه Dumpهای حافظه را جمع آوری کرده و توسط ویژوال استودیو راه حل مشکلات درج شدهی در آنها را پیدا کنید.
ابزارهایی وجود دارند که حافظه را مورد کاوش قرار داده و فعالیتهایی را که یک پروسس انجام میدهد، مانیتور میکنند. در حال حاضر ابزارهای مختلفی برای اینکار وجود دارند؛ از جمله Visual Studio ،ProcDump ،DebugDiag و WinDbg که ما در این پست از ProcDump استفاده میکنیم.
برای شروع، من یک برنامهی ساده را ایجاد کردم که شامل یک button است و با فشردن آن، یک خطای نامشخص اتفاق میافتد. برنامه را اجرا میکنیم. سپس به TaskManager رفته و آیدی پروسس برنامه را پیدا میکنیم:
آیدی پروسس ما، 10896 میباشد.
ProcDump را دانلود کرده و آنرا توسط CMD، به این صورت اجرا میکنیم تا تمامی فعالیتهای پروسس موردنظر را زیرنظر بگیرد و فایل Dump ای را تولید کند:
procdump.exe -ma -e 10896
حالا نوبت به کلیک بر روی Button، جهت ایجاد خطا میرسد. بر روی دکمه کلیک کرده و منتظر میشویم تا Dump، از حافظه جمع آوری و در سیستم تولید شود. عملیات با موفقیت انجام شده و فایل Dump در آدرس مشخص شده، ایجاد میشود.
پیدا کردن منشاء خطا
بعد از ایجاد فایل Dump، نوبت به پیدا کردن منشا خطا و رسیدن به کد موردنظر میرسد. ویژوال استودیو را باز کنید و فایل Dump را درون VS درگ/دراپ کنید.
در پنجرهای که باز میشود، میتوانید مشخصات کاملی از برنامه را مشاهده کنید. سمت راست، چند گزینه وجود دارند که با توجه به نوع برنامه (مدیریت شده یا محلی) و زبان برنامه نویسی، باید آنها را انتخاب کنید. از آنجائیکه برنامهی ما با زبان سی شارپ ایجاد شده، گزینهی اول یعنی Debug with Managed only را انتخاب میکنیم.
بعد از انتخاب این گزینه، بلافاصله به کدی که باعث ایجاد خطا میشود، هدایت میشویم:
کلام آخر اینکه سعی کنید تا حد ممکن، خودتان خطاها را مدیریت کنید و از ابزارهای خطایاب مانند AppCenter نیز استفاده کنید. اخیرا WPF و WinForm نیز به AppCenter اضافه شدهاند.