PDA

View Full Version : Advanced Exception Handler . یافتن دقیق مکان خطا.



حمیدرضاصادقیان
پنج شنبه 25 مهر 1387, 13:13 عصر
سلام دوستان.من چند وقت دنبال این بودم که وقتی خطا رخ میده محل دقیق خطا رو بشه پیدا کرد. از طریق call stack دلفی میشد اینو پیداکرد ولی به غیر از اون وقتی دست کاربر باشه نمیشه فهمید.فقط میشه پیغام خطا رو پیدا کرد.حالا یک لینک پیداکردم که این مشکلو حل کرده.
امیدوارم بدرد بخوره.
http://dn.codegear.com/article/30115

vcldeveloper
پنج شنبه 25 مهر 1387, 16:12 عصر
مجموعه رایگان JEDI JVCL یک Dialogbox برای این منظور ارائه میده که میتونه اطلاعات مربوط به هر خطا، مشخصات سیستم کاربر، لیست ماجول های لود شده، و کنترلی که در لحظه خطا توسط کاربر فعال بوده را گزارش بده، و در یک Log File ذخیره کنه. از یک کتابخانه برای این کار استفاده میکنه که مربوط به JCL هست، فکر کنم این کتابخانه امکان دریافت لیست Call Stack هم داشته باشه.

علاوه بر اینها، MadException هم که قبلا رایگان بود (الان هم احتمالا بتونید نسخه رایگانش را پیدا کنید)، این قابلیت را داشت. البته Call Stack و Disassembler رو هم نشون میداد، با قابلیت ارسال گزارش بصورت ای میل.
غیر از این Eurekalog هم یک گزارش مفصل از هر خطا تولید میکنه. خودش میتونه گزارش ها را ارسال یا در فایل Log ذخیره کنه. یک Log Viewer مخصوص هم داره که کار کردن با Logهاش رو آسون کرده. اگر هم فایل Log را روی سیستمی که روش دلفی نصب هست، و پروژه درش لود شده باز کنید، با دابل کلیک بر روی هر خطا، خودش محل آن در سورس را پیدا میکنه و شما را به محل خطا در سورس میبره. Eurekalog تجاری هست و باید یا خریداری کنید، یا برید دنبال کرکش که همه جا پیدا میشه.

MadException و EurekaLog از نظر من برای تست بتا خوب هستند، نه نسخه نهایی. چون بیش از حد به کاربر درباره برنامه اطلاعات میدن. طوی EurekaLog گزینه ایی ندیدم که بشه اطلاعات نمایش داده شده در Dialogbox را محدود کرد. فارسی کردنشان هم چندان جالب در نمیاد.

Dialogbox موجود در JVCL قابلیت Customization بهتری داره، چون فقط یک فرم بصورت Dialog box به پروژه اضافه میکنه، و این فرم از کلاس خاصی مشتق شده، پس شما می تونید این فرم را به هر شکل و شمایلی که خواستید در بیارید، یا بهش امکانات جدید اضافه کنید. اطلاعاتی هم که میده، هم برای دیباگ در اکثر مواقع مفید هستند، هم خیلی وارد جزئیات نمیشه که جزئیات برنامه برای کاربر مشخص بشه. البته مجانی و Open-source هم هست. من استفاده از آن را در نسخه نهایی ترجیح میدم.

Saeed_m_Farid
سه شنبه 22 اردیبهشت 1388, 18:07 عصر
سلام
نمیدونم که این تاپیک رو بالا آوردن درست بود یا نه؟ ولی زیاد قدیمی نبود نخواستم تاپیک تکراری بزنم :

MadException و EurekaLog از نظر من برای تست بتا خوب هستند، نه نسخه نهایی. چون بیش از حد به کاربر درباره برنامه اطلاعات میدن. طوی EurekaLog گزینه ایی ندیدم که بشه اطلاعات نمایش داده شده در Dialogbox را محدود کرد. فارسی کردنشان هم چندان جالب در نمیاد.

شاید نسخه EurekaLog موردنظر در زمان ارائه این تاپیک امکان بالا رو (دیالوگهای سفارشی) نداشت ولی Features ذکر شده برای نسخه Trial که رو دلفی نصب شده موارد زیر هم ذکر شده :




Exception dialogs & HTML error page


Full customizable Exception-Dialog (with more new styles - as MS style) NEW
Add a customizable HELP button (call an event) NEW
Full UNICODE logs handling NEW
Fully customizable message texts collections (for multi-language applications) NEW
Adding customizable "Support Link" in the Exception-Dialog
Customizable HTML error page via HTML template
Automatic Exception-Dialog closing after a customizable time
Jump from Exception Dialog line to source code line (with a simple double-click)
Customizable log-file section view
(show/hide Modules-Processes & Assembler-CPU sections)
Advanced tree view of all running/calling threads call-stacks


Send messages & Files
Delivery of every new BUG to the most used Web BUG-Tracking tools NEW
Compress and encrypt all files to send in in ZIP format NEW
Delivery of a customizable email or Web message for every exception, with log-file
Attach a PNG Screenshot to the message
Append text containing a user description on the bug reproducibility to the log
Upload of log-file and attached files via HTTP/HTTPS and FTP protocol
Send a log-file copy in XML format
Send the last generated HTML page (only for the WEB applications)
Send the email/"upload files" in a separated thread
Attach customizable files to the send message
Add customizables data to the log-file
Add customizables fields to the uploading HTML page

با توجه به اینکه قصد خرید این نرم افزار رو دارم، باید پس از نحوه کارکرد و اطمینان از گفته های دوستان اقدام به اینکار کنم.
نمیدونم JEDI JVCL هم گستردگی امکانات EurekaLog رو داره (از جمله detect کردن تمام کامپایلرهای نصب شده و سرویس پک های اونا! روی سیستم، ایمیل باگ، هندلینگ کامل log file های ایجاد شده وسط خودش، Text base بودن اصولی و ...)


با توجه به توضیح بالا چندتا سوال داشتم :
JEDI JVCL اونقدر مطمئن هست که بشه از یک سیستم گسترده تجاری تا برنامه های low level مورد استفاده قرار بگیره؟ امکانات memory leak، Assembler، CPU Info و پروسسهای درحال اجرا در لحظه باگ رو داره یا نه و اگه داره کدوماشون رو؟ استفاده ازش به همین سادگی و جامعی هست یا نه (یعنی به GUI اضافه میشه؟ هندلینگ فایل نهایی لاگ با خودشه یا نه؟ خروجیXML و HTML، داشتن BUG-Tracking، قابلیت نمایش درست-حسابی! در کنسول و ...)
با توجه به اینکه EurekaLog برای تشخیص memory leak تنها 0.5 درصد به حجم فایل dll، COM یا فایل اجرایی اضافه میکند (باتوجه به اینکه دست ما دربرخی جاها مثل سایر پلتفرم های برنامه نویس برای استفاده از حجم بالا؛ باز نیست-ازجمله درایورنویسی-)، آیا JEDI JVCL هم به همین نحو عمل میکند؟
آخرین نسخه EurekaLog قابل خریداری چیست و خرید از چه طریقی داخل کشور امکانپذیره؟ البته اگه برای پروژه های اینترپرایس با معمولی، تعداد کاربران و ... هم فرقی میکنه ممنون میشم به تفصیل ذکر بشه.
از طویل شدن پست عذر میخوام و از دوستان عزیز خواهش می کنم درصورت داشتن اطلاعات در این زمینه بنده رو راهنمایی کنند.

با تشکر.

vcldeveloper
سه شنبه 22 اردیبهشت 1388, 19:18 عصر
شاید نسخه EurekaLog موردنظر در زمان ارائه این تاپیک امکان بالا رو (دیالوگهای سفارشی) نداشت ولی Features ذکر شده برای نسخه Trial که رو دلفی نصب شده موارد زیر هم ذکر شده
نسخه های قدیمی هم امکان Customize داشتند، ولی تا جایی که من یادم هست، این Customize مربوط به ترجمه پیام های نمایش داده شده، و ظاهر پنجره خطا، و دکمه های قابل نمایش بود، و نمیشد سطح اطلاعات نمایش داده شده را کنترل کرد، مثلا پنجره مربوط به Disassembler را مخفی کنیم، یا بگیم Call Stack نمایش داده نشه.

در JCL هم این مسائل وجود داره، ولی خوبیش در این هست که DialogBox موجود در JCL به عنوان یک فرم جدید به پروژه اضافه میشه، شما می تونید مثل هر فرم دیگه، ظاهرش را تغییر بدید، بهش چیزهایی اضافه کنید، نحوه نمایش پیغام را تغییر بدید، و هر کار دیگه ایی که میشه با یک فرم در Designer دلفی انجام داد. از طرف دیگه، کدهای مربوط به نمایش اطلاعات هم در همین فرم قرار دارند، شما اگر نمی خواید یک سری اطلاعات خاص به کاربر نمایش داده بشه، یا میخواید یک سری اطلاعات بیشتر به کاربر داده بشه، کافی هست کدهای مربوط به اون بخش از اطلاعات را از سورس فرم حذف کنید، یا سورس خودتان را به آن اضافه کنید.
Exception Dialog موجود در JCL امکان ثبت خطاها در Log File و ای میل خطا ها را داره. Log Fileایی که ساخته میشه بصورت Text هست، و قابل خواندن توسط انسان.

ابزارهایی مثل EurekaLog امکانات بیشتری چه از نظر حجم اطلاعات Log شده در برنامه، چه از نظر کار با Log ارائه می کنند. این مسئله هم طبیعی هست، چون EurekaLog یک محصول تجاری هست، و JCL یک محصول Open Source.


با توجه به اینکه EurekaLog برای تشخیص memory leak تنها 0.5 درصد به حجم فایل dll، COM یا فایل اجرایی اضافه میکند (باتوجه به اینکه دست ما دربرخی جاها مثل سایر پلتفرم های برنامه نویس برای استفاده از حجم بالا؛ باز نیست-ازجمله درایورنویسی-)، آیا JEDI JVCL هم به همین نحو عمل میکند؟
JCL Exception Dialog حدودا 200 - 300 کیلوبایت به حجم EXE اضافه میکنه، البته این به نوع اطلاعاتی که برای نمایش انتخاب می کنید هم بستگی داره.


ازجمله درایورنویسی
یعنی می خواید از این ابزارها برای Log کردن خطاها در یک درایور کرنل استفاده کنید؟! فکر نمی کنم این ابزارها هیچکدوم این قابلیت را داشته باشند. اگر هدف تان این هست، قبل از خرید حتما از تولید کننده درباره پشتیبانی از این قابلیت سوال کنید.

در پایان تصاویر مربوط به برخی از Optionهای JCL Exception Dialog را قرار میدم. الان روی این دلفی EurekaLog نصب نیست که بخوام صفحه Option آن را هم نمایش بدم.

30780

30781

30782

Saeed_m_Farid
چهارشنبه 23 اردیبهشت 1388, 16:12 عصر
Log Fileایی که ساخته میشه بصورت Text هست، و قابل خواندن توسط انسان.
این یعنی چه؟ البته مونده به انسانش!

یعنی می خواید از این ابزارها برای Log کردن خطاها در یک درایور کرنل استفاده کنید؟! فکر نمی کنم این ابزارها هیچکدوم این قابلیت را داشته باشند. اگر هدف تان این هست، قبل از خرید حتما از تولید کننده درباره پشتیبانی از این قابلیت سوال کنید.به فرض اگه من تو Engine یه کارت PCI که داره پشت سرهم packet receive میکنه memory leak داشته باشم، تشخیص نمیده؟ چه فرقی میکنه؟ چون واسم مهمه که برنامه ایکه به اون engine وصل میشه، متوجه رخداد exception و دلیلش بشه، یا اصلا من تو خونم متوجه بشم، فرقی نمی کنه، مهم اینه که دلیل down شدن engine مشخص بشه، چون عملا برنامه متصل به اون، درصورت down شدنش با winamp فرقی نداره، فقط میشه یه GUI بی مصرف ...
بازم ممنون

vcldeveloper
چهارشنبه 23 اردیبهشت 1388, 18:39 عصر
این یعنی چه؟ البته مونده به انسانش!
منظور اینه که از فرمت خاصی استفاده نمیکنه که فقط توسط خودش قابل فهم باشه، بلکه داده های نوشته شده در Log را می توان بدون استفاده از ابزار خاصی، فقط با باز کردن Log در یک Text Editor و خواندن آنها متوجه شد:

نمونه خلاصه شده ایی از Log تولید شده با JCL Exception Dialog را می تونید ببینید:

================================================== ============================
= 2008/06/21 07:44:23 ب.ظ =
================================================== ============================
Invalid class typecast.

Exception class: EInvalidCast
Exception message: Invalid class typecast.
Exception address: 006C6407
------------------------------------------------------------------------------
Stack list, generated 2008/06/21 07:44:18 ب.ظ
(002C5402){Test.exe } [006C6402]
(00002016){Test.exe } [00403016]
(002C5402){Test.exe } [006C6402]
(000A277C){Test.exe } [004A377C]
(0004A008){Test.exe } [0044B008]
------------------------------------------------------------------------------
System : Windows XP Professional, Version: 5.1, Build: A28, "Service Pack 2"
Processor: AMD, AMD Athlon(tm) XP 2600+, 1920 MHz MMXex SSE1 3DNow!ex
Memory: 1023; free 374
Display : 1024x768 pixels, 32 bpp
------------------------------------------------------------------------------
List of loaded modules:
[00400000] C:\WC\Output\Test.exe
1.0.1.79 - 1.0.1.79
Test Module
[01450000] C:\WINDOWS\system32\HHCtrl.OCX
<7E410000> 5.2.3790.2847 - 5.2.3790.2847 (srv03_sp1_gdr.061210-2319)
Microsoft® HTML Help Control
[0FFD0000] C:\WINDOWS\system32\rsaenh.dll
5.1.2600.2161 - 5.1.2600.2161 (xpsp.040706-1629)
Microsoft Enhanced Cryptographic Provider
------------------------------------------------------------------------------
Active Controls hierarchy:
TScrollBox "ScrollBox1"
TPanel "pnlContent"
Tform1 "form1"
------------------------------------------------------------------------------

vcldeveloper
چهارشنبه 23 اردیبهشت 1388, 18:48 عصر
به فرض اگه من تو Engine یه کارت PCI که داره پشت سرهم packet receive میکنه memory leak داشته باشم، تشخیص نمیده؟ چه فرقی میکنه؟ چون واسم مهمه که برنامه ایکه به اون engine وصل میشه، متوجه رخداد exception و دلیلش بشه، یا اصلا من تو خونم متوجه بشم، فرقی نمی کنه، مهم اینه که دلیل down شدن engine مشخص بشه، چون عملا برنامه متصل به اون، درصورت down شدنش با winamp فرقی نداره، فقط میشه یه GUI بی مصرف ...
فرق میکنه. اگر منظور شما این هست که یک درایور سخت افزار نوشتید، و این درایور متناسب با مشکلات ایجاد شده براش، Exceptionهای مناسب تولید میکنه، و برنامه ایی در User Mode دارید که از این درایور سخت افزاری استفاده میکنه، و می خواید از این ابزارها در آن برنامه استفاده کنید؛ خب مشکلی نیست، و این ابزارها بخوبی عمل می کنند.

اما اگر منظور شما این هست که از اینگونه ابزارها مستقیما در داخل درایور سخت افزاری خودتان استفاده کنید، و هر زمان درایور شما به مشکلی برخورد، از طریق این ابزارها Log ایجاد کند، باید از سازنده این ابزارها بپرسید که آیا برنامه شان برای درایورهای کرنل هم قابل استفاده هست یا نه. البته بعید می دونم، چون شما در سطح کرنل رابط کاربر گرافیکی ندارید که بخواید به کاربر پیام خطا با امکان ارسال ای میل نمایش بدید. البته من اطلاع چندانی از برنامه نویسی سطح کرنل ندارم، برای همین، اگر منظورتان همین هست، بهتره از سازنده سوال کنید.

در ضمن، امکان ثبت خطاها در Event Viewer ویندوز هم وجود داره. فکر کنم درایورهای سطح کرنل هم امکان ثبت خطا در آن را داشته باشند، ولی باز این مورد را هم باید از کسی که در این زمینه اطلاعات بیشتری دارد، بپرسید.

Saeed_m_Farid
چهارشنبه 23 اردیبهشت 1388, 20:22 عصر
.wysiwyg { BACKGROUND: #f5f5ff; FONT: 10pt tahoma, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; COLOR: #000000 } P { MARGIN: 0px } .inlineimg { VERTICAL-ALIGN: middle }
فرق میکنه. اگر منظور شما این هست که یک درایور سخت افزار نوشتید، و این درایور متناسب با مشکلات ایجاد شده براش، Exceptionهای مناسب تولید میکنه، و برنامه ایی در User Mode دارید که از این درایور سخت افزاری استفاده میکنه، و می خواید از این ابزارها در آن برنامه استفاده کنید؛ خب مشکلی نیست، و این ابزارها بخوبی عمل می کنند.

دقيقاَ؛ يه dll را در نظر بگيريد؛ مطمئنا فايل sys كه از اين شوخي ها باهاش نميشه كرد!
بعضي مواقع اين dll دچار memory leak ميشه و تشخيصش خيلي مشكل ميشه!
در ضمن نفرمودين مرجعي واسه تهيه اين نرم افزار مي شناسيد؟

vcldeveloper
پنج شنبه 24 اردیبهشت 1388, 02:08 صبح
دقيقاَ؛ يه dll را در نظر بگيريد؛ مطمئنا فايل sys كه از اين شوخي ها باهاش نميشه كرد!
بعضي مواقع اين dll دچار memory leak ميشه و تشخيصش خيلي مشكل ميشه!

خب، پس شما با این برنامه ها مشکلی نخواهید داشت.


در ضمن نفرمودين مرجعي واسه تهيه اين نرم افزار مي شناسيد؟
JCL Exception Dialog که اوپن سورس هست. EurekaLog هم تقریبا توی هر سایت کرک مربوط به کامپوننت های دلفی پیدا میشه. فکر کنم همین چند وقت پیش دیدم جایی لینک آخرین نسخه اش با سورس کد هم موجود بود. البته من دانلود نکردم ببینم کار میکنه یا نه. قبلا که از همین نسخه ها استفاده کردم، مشکلی نداشت. غیر از اینکه شما اصرار داشته باشید حتما نسخه تجاری آن را خریداری کنید.

Delphi Coder
پنج شنبه 31 اردیبهشت 1388, 15:33 عصر
EurekaLog هم تقریبا توی هر سایت کرک مربوط به کامپوننت های دلفی پیدا میشه. من یه بار crack شدشو دانلود کردم استفاده کنم 2 ماه پدرم درومد سیستم ویروسی شده بود. هیچ آنتی ویروسی هم کوچکترین warning ای نمی داد. بعد دو سه بار نصب مجدد ویندوز و با کمک ابزارهایی مثل regmon و filemon و ... تازه دو تا DLL پیدا کردم فرستادم برای McAffe آنالیز کردن گفتن ویروسه فایل update هم دادن منتها نشد استفاده کنم چون نسخه crack شده درست حسابی از mcaffe نداشتم. تازه دو سه روز بعدش آنتی ویروسهای دیگه هم detect کردن .... توصیه میکنم زیاد کنجکاو نشید که برید crack شو DL کنید.
MadExcept هم user friendly تر هست هم مجانی(البته برای استفاده غیر تجاری). تنها حسنی که من تو eurekalog دیدم نشون دادن Memory Leak بود که اونم FastMM میتونه جای این کمبود رو پر کنه.