PDA

View Full Version : سوال: نحوه اطلاع از خطاهایی که برای برنامه در سیستم کاربر رخ داده



md3848
چهارشنبه 06 فروردین 1399, 15:09 عصر
سلام - یه سوال اساسی :لبخند:
چطور میشه وقتی یوزر داره برنامه رو استفاده میکنه، ممکنه بعضی قسمتا خطا بده، چطور میشه که اطلاعاتی درباره خطا برای من برنامه نویس! ارسال بشه؟ مثل خطایی که برا یوزر رخ داده، برام ایمیل بشه تا بعدا بتونم رفعش کنم :متفکر:
یا این که روال کار اینطوره که یوزر باید متن خطا رو بفرسته برام تا من بتونم رفع کنم!؟ :افسرده:
از چی باید استفاده کنم؟ اولین باره وارد این مبحث شدم - اصلا نمیدونم باید از چی استفاده کنم :گریه::لبخند:

hamidrezax1
چهارشنبه 06 فروردین 1399, 20:44 عصر
سلام دوست عزیز شبکه ای که استفاده میکنید چی هست.اینترنت یا اینترانت(داخلی)
شمار میتونید با نوشتن try از خطا های احتمالی جلوگیری کنید و در همونجا با رعایت حقوق کاربرهاتون خطا های احتمالی رو دریافت کنید.البته بهتره که کاربر به اختیار خودش اینکار رو انجام بده تا از یکسری مشکلات جلوگیری بشه

md3848
پنج شنبه 07 فروردین 1399, 10:32 صبح
اینترنت / خب یه دکمه باشه، وقتی خطایی رخ داد، در پنجره خطا یه دکمه باشه که اگه کاربر مثلا کلیکش کرد، خطا برام ارسال بشه - اینطوری حقوق کاربر هم رعایت میشه ( بدون اجازش کاری انجام نمیشه در پسزمینه ) و اگه بعد از فشرده شدن دکمه ارسال خطا، ویندوزش بلاک کرد نرم افزارو ( فایروال ویندوزش، آنتیویروس و... یا اصلا طرف نت نداشت )، به کاربر یه پیام نشون میدیم که بلاک شدیم و دسترسی به نت نداریم و از این جور داستانا و خودت این خطا رو به این آدرس ایمیل کن تا خطا رو رفع کنیم /
خب حالا برای این کار کامپوننت آماده ای هستش؟ کامپوننتی که مایکروسافت از قبل تعبیه کرده باشه تو VISUAL-STUDIO ؟ چمیدونم یه چیز معروفی که همه ازش استفاده میکنن ( یا این که از این خبرا نی و باید خودم تمام کاراشو بکنم؟ :افسرده: )

NasimBamdad
پنج شنبه 07 فروردین 1399, 12:08 عصر
از این خبرا نیست و خودت باید تمام کاراشو بکنی ،

بهتره شما یه سیستم لاگ داشته باشی ، لاگ هایی که اتفاق می افته توی یک فال Text ذخیره کنی ، بعد از کاربر بخوای فایل رو برات بفرسته ، یا اینکه یه قسمت بزاری توی نرم افزارت ارسال خطاها که یه فرم باشه و دکمه و .. هرچیزی که نیاز داری

بعدش با زدن اون دکمه فایل لاگ برات به صورت فشرده ایمیل بشه و این کار رو کاربر انجام بده

md3848
پنج شنبه 07 فروردین 1399, 12:22 عصر
یه سوال - الان خطا مثل عکس زیر برا کاربر رخ داده، میشه تو هیمن پنجره فوق، یه گزینه اضافه کرد با عنوان ارسال خطا به نویسنده؟

یا مثلا یه فرم جدید طراحی کرد برای نمایش خطا های رخ داده و خطایی رخ داد، فرم خطا مخصوص که طراحی کردیم، اون نمایش داده بشه؟

یا این که خطا رخ داد، برنامه رو میبنده و میره فایل LOG رو برام ایمیل میکنه؟ ( میره تو منو HELP برنامه و ایمیل منو پیدا میکنه و بعد ایمیل میکنه! وگرنه ایمیل منو که حفظ نی :لبخند: )
یا مثلا تو همون منو HELP یه گزینه میزارم با عنوان ایمیل فایل LOG ( خطاهای رخ داده ) به نویسنده.

151503

taghvajou
پنج شنبه 07 فروردین 1399, 17:55 عصر
سلام بدون کرونا به همه
یه نکته ای اول بگم قاعدتا داریم در مورد اکسپشن های پروگرم صحبت میکنیم و خطاهای که مربوط به فئیل سیستم باشه قضیه اش متفاوته و با این روش ها نمیشه کنترل کرد.

و اما بعد، کمپوننت آماده ای که نیست یا حداقل خود ویژوال استودیو برای ویندوز فرم نداره اما میشه خطا رو سفارشی (Custom Exception) که از کلاس اسکپشن ارث میبره در حد دریافت متن خطا (اینر دیتا) و نمایش پیام سفارشی اینها ولی به این مسیج که عکسش رو گذاشتی نمیشه دکمه ای اضافه کرد. چون اساسا کلاس اکسپشن ویژگی هایی مانند دیتا و اینتر مسیج و تارگت و البته لینک راهنما داخلش هست و متاسفانه مثل مسیج باکس به ما امکان انتخاب دکمه های پیام رو نمیده. (داخل پارانتر یه کم دستمون تو WPF بازتره نسبت به ویندوز فرم)

دو تا راه نمایش هست:
*** راه اول اینه داخل بخش اکسپشن مسیج باکس ویندوز رو نمایش بدین (MessageBox.Show) که چندتا اینام داره برای انتخاب دکمه ها! ولی دکمه هاش محدوده !
*** راه دومش اینه یه فرم مخصوص درست کنین. خودتون دکمه های مورد نظر رو داخل بذارین. متن خطا رو هم که از اکسپشن دریافت کنین به فرمت مورد نیاز نمایش یا ذخیره یا ارسال کنین.

!!! میتونین تو بک گراند یه پینگ بگیرین و اگه اینترنت وجود داشته ایمیل کنین اگه نبود تو یه فایل ذخیره کنین یا یه کم حوصله و سلیقه به خرج بدین کلاس و آبجکت مدل تعریف کنین و ایکس ام ال کنین و ذخیره کنین. حالا ایتنکه یوزر خودش فایل رو برای شما بفرسته و یا دوباره یه چیزی بنیویسین که پوشه اکسپشن ها رو بخونه و اپلود کنه برای شما هم یه نکته دیگه است.

برای اینکه بشه سوال شما رو بهتر جواب داد، لازمه ببینیم کجا میخوایم این اکسپشن ها رو مدیریت کنیم.
حالت اول: آیا جاهای خاصی که میدونیم ترای کچ (try catch) بذاریم و تو بخش کچ اکسپن رو بگیریم و از دیتای داخل اکسپن که تو کچ به دست میاد استفاده کنیم مثلا یه تابعی ارسال به ایمیل یا ذخیره در فایل و ... اونجا فراخوانی بشه.



try
{


}
catch (Exception ex)
{
// تابع شما برای استفاده ex
throw;
}



البته یه چیزی! بعد از ترای کچ، یه استپ هم هست فاینالی :لبخند: اونم گاهی به کار میاد Finally. که در هر دو صورت تراک و کچ این بخش فاینال اجرا میشه.

حالت دوم: کل اکسپشنهای اپلیکیشین ثرد رو یه جا هندل کنین Application.ThreadException ائونت رو بسازین و داخل تابع مورد نظر رو فراخوانی کنین. این کار باید تو پروگرم اصلی برنامه انجام بشه که مربوط به خطاهای ثرد اصلی و فرم و گرافیک و اینهاست.

اگر برنامه تون مولتی ثرد هستش، یه ائونت دیگه رو هم باید هندل کنین به نام appdomain.unhandled expetion.

در اخر یاداوری کنم وقتی به روش دوم (از پایه) همه اکسپشن ها رو هندل میکنین دیگه ترای کچ که به روش اول نوشتین تحت کنترل نیست.