درس چهارم- ایرادیابی
مقدمه
خطاها
بخش بدون تفکیک و دوری ناپذیر در برنامه نویسی هستند. این مسئله برای همه
افرادی که رو به برنامه نویسی میآورند مشترک است. البته هر چقدر تجربه ما
در نوشتن کدها بالاتر میرود، احتمالا از تعداد خطاها و ایرادها در
برنامههایمان کاسته میشود. اما فراموش نکنید که این جزوی از ساخت سیستم
است و نوشتن برنامه بدون ایراد تقریبا غیر ممکن است. برای اینکه این ادعا
را روشنتر بیان کنیم و بیشتر مورد قبول شما قرار گیرد، به تجربه خودتان در
استفاده از برنامهها و یا ابزارکهای نوشته شده رجوع کنید. بدون شک در
طول کار با برنامههای متعدد بارها و بارها به ایرادها برخوردید، شاید
کلمه Bug
یا اشکال برایتان از این جهت آشنا به نظر آید. در این درس نگاهی به
دلایل و یا موجبات اشکالها و اثرات آنها در تارنماها پرداخته و تکنیکهایی
را برای یافتن و رفع آنها بررسی میکنیم.
انواع خطاها
در ابتدا باید ذکر کرد که عامل یا محل اشکال میتواند در هر قسمتی از
تارنما باشد. بطور مثال در برچسبهای اچتیامال، پیاچپی و یا اسکیو
ال. معمولا خطاهای اچتیامال آسانترین در ردیابی و رفع هستند، چراکه شما
نتیجه خطا را در صفحه مرورگر میبینید و احتمالا خیلی راحت آن را برطرف
میکنید.
خطاهای پیاچپی شاید بیشترین باشند چرا که این برنامه در اصل هسته اصلی تارنما را تشکیل میدهد. این خطاها به سه دسته عمومی زیر تقسیم میشوند:
Syntactical یا خطای دستوری: شاید بیشترین تعداد خطاها، ایرادهای دستوری در میان کدهای شما باشند که براحتی هم قابل پیدا کردن و اشکال زدایی هستند. مثلا فراموش کردن علامت $ ویا ; که اجازه اجرای کد را نمیدهند و باید ابتدا آنها را درست کرد. البته مشاهده این خطاها وابسته به فعال بودن قسمت نمایش ایرادها در پیکربندی پیاچپی شما است (در ادامه درس به این نکته هم پرداخته خواهد شد).
Run-time: این دسته خطاها برنامه را از اجرا باز نمیدارند، بلکه اجرای برنامه بطوریکه نوشته شده انجام نمیشود و ممکن است شما نتیجه متفاوت از آنچه نوشتهاید دریافت کنید. مثلا فراخوانی تابعی با تعداد یا نوع پارامترهای نادرست. در این گروه اشکالها پیاچپی معمولا یک پیغام خطا میدهد که اشکال را بطور مشخص نشان میدهد.
Logical: این دسته اشکالها شاید بدترین آنها باشند چراکه لزوما گزارش یا خطایی از پیاچپی اعلام نمیشود و برنامه مسیر عادی خود را طی میکند. این نوع خطاها معمولا مشخص نیستند و در اجرای برنامه هم تاثیری ندارند. پس پیدا کردنشان کمی سختتر به نظر میآید.
خطاهای اس کیو ال: خطاها در زبان پرسوجوی اسکیو ال بیشتر به شکل ایرادهای دستوری هستند و در طول اجرای پرسوجو انجام و نمایش داده میشوند. ایرادیابی در این منطقه هم سخت به نظر نمیآیند. مثلا اشتباه در نوشتن دستوری از نظر ترتیب یا استفاده غلط از کلمات پیش فرض.
از خطاهای واضح و تکراری، پیغام عدم دسترسی به پایگاه و یا سطح دسترسی است که در قسمتهای آینده بیشتر از آنها صحبت میکنیم.
ایرادیابی ابتدایی
لری المن در کتاب خود میگوید: معمولترین راه برای ایرادیابی اینست که
در زمان خستگی زیاد کمی از رایانه خود دوری کنید. استراحت کوتاه و تازه
کردن ذهن بهترین و ابتداییترین راه ایرادیابی است. ایشان در کتاب خود
فهرستی از مواردی که باید صورت بگیرد آوردهاند که ما هم به آنها اشاره
میکنیم.
۱. اطمینان پیدا کنید که برگه درست را اجرا میکنید. ممکن است شما کدهای صفحهای را رفع اشکال کنید اما در برگه خود نتیجه آن را نبینید. این بخاطر اینست که صفحه شما به غیر از آن برگهایست که اشکال یابی کردهاید.
۲. همیشه از ثبت کردن آخرین تغییرات انجام شده اطمینان حاصل کنید.
۳. از آنجایی که پیاچپی یک زبان سمت سرور است، باید تمام فایلهای شما توسط URL اجرا شوند. این یعنی اینکه اگر از مثلا WAMPاستفاده میکنید، فایلهای شما باید در پوشه WWW باشند و شما با نشانی اینترنتی از آنها استفاده کنید.
۴. دانستن نسخه مورد استفاده شده خیلی مورد اهمیت است، چرا که بعضی از توابع مربوط به نسخههای آخرین هستند و اگر شما از نسخههای قدیمی استفاده کنید به مشکل عدم سازگاری یا نبود آن تابع مواجه میشوید. یکی از بهترین ابزارها تابعphpinfo() است که اطلاعات مفیدی در اختیار شما قرار میدهد.
۵. بدانید که از چه سرویس انتشار وب استفاده میکنید، بطور مثال در WAMP از Apache استفاده میشود و یا ویندوز خود از IIS بهره میبرد.
۶. همیشه برگههای خود را در مرورگرهای متفاوت اجرا کنید تا خروجی را در همه آنها مقایسه و در صورت مشاهده اشکال در آن کنید. البته این مشکل بیشتر به اچتیامال و سیاساس مربوط میشود.
اشکال زدایی در اچتیامال
۱. همیشه در صورت مشاهده ایراد به منبع کدهای خود مراجعه کنید، برای دیدن
کدها کافیست که بر روی صفحه راست کلیک کرده و دیدن منبع را بزنید.
Right Click On Page/ View Page Source
۲. از ابزارهای اعتبار سنجی استفاده کنید تا ایرادها را راحت پیدا کنید.
۳. توجه زیادی به مرورگر خود داشته باشید، فایر فاکس و گوگل کروم و ... البته فایر فاکس همراه ابزارکهایی که در اختیار شما قرار میدهد انتخاب خوبی میتواند باشد.
۴. همیشه از چندین مرورگر برای بررسی کارآمدی کدهای خود استفاده کنید.
نمایش ایرادهای پیاچپی
پیاچپی خود پیامهای واضح و کارامدی را در هنگام بروز خطا به نمایش
میگذارد. که این نمایش بطور پیش فرض خاموش است چراکه این پیامها برای شما و
در زمان نوشتن کدها در زمان امتحان و رفع خطا است و نباید در صورت بروز
خطا برای کاربران به نمایش در آیند.
برای راهاندازی نمایش خطاها به دو شیوه میتوان عمل کرد. ابتدا اجرای آن فقط برای یک صفحه و کدهای آن و یا پیکر بندی آن برای کل کدها.
راهاندازی برای یک صفحه
برای دیدن خطاها برای یک صفحه ویژه کافیست که از دستور زیر استفاده کنید:
ini_set('display_errors', 1);
این دستور در صورت بروز خطا در کدهای شما آنها را نمایش میدهد. برای عدم نمایش هم میتوانید با تغییر عدد یک به صفر از نمایش خطاها جلوگیری کنید.
ini_set('display_errors', 0);
برای مثال تکه کد زیر را در صفحه قرار دهید و جای عدد 1 و 0 را تغییر دهید تا نتیجه را مشاهده فرمایید.
ini_set ('display_errors', 1);
foreach ($var as $v) {}
$result = 1/0;
پیکربندی پیاچپی
برای پیکربندی پیاچپی باید فایلphp.ini را پیداکرده که سادهترین کار با استفاده از تابع phpinfo() است. بعد از اجرای این تابع در برگه خود به دنبال Loaded Configuration File در قسمت ابتدایی اطلاعات بروید. بطور مثال برای ما آدرس زیر را نمایش میدهد:
I:wamp inapacheapache2.2.22 in
این فایل را با یک ویرایشگر باز کنید، برای کار با این فایل باید به چند نکته توجه کنید:
- در بالای صفحه اطلاعاتی در مورد این فایل وجود دارد که فقط برای آگاهی است.
- علامت ; برای گذاشتن متن است و هر چیز بعد از آن به عنوان کد اجرا نمیشود.
- دستور عمل نحوه عملکرد هر دستوری توضیح داد شده است.
- تلاش کنید بجای تغییرات ابتدا دستورهای قدیمی را با یک ; بصورت غیر فعال و متن در بیاورید و بعد زیر آن دستور مورد نظر خود را بنویسید.
- در زمان نوشتن هر دستوری با اضافه کردن توضیح و دلیل این کار این راه را برای فهم راحتتر در آینده باز کنید تا اگر خود شما یا کس دیگری به سراغ این فایل رفت براحتی قابل درک باشد.
برای تغییر قسمت نشان دادن خطاها بدنبال گزینه Display_Errors بگردید. در حال حاضر این گزینه برابر Off خواهد بود که باید بصورت On در بیاورید. همانطور که گفتیم بجای تغییرات خط جدیدی ایجاد کنید مانند زیر:
; display_errors = Off // علامت قبل از دستور کار غیر فعال کردن را انجام میدهد.
; این دستور بصورت فعال در آمده
display_errors = On
با این دستور شما امکان نمایش خطاها را برای کل سیستم خود راه اندازی کردید.
انواع نمایش خطاها
بطور کلی نمایش خطاها به چند قسمت تقسیم میشوند:
۱. توجه (Notices): که لزوما مشکل نمیتوانند باشند و اجرای کد را مانع نمیشوند.
۲. اخطار (Warnings): مشکلی را نشان میدهند اما اجرای کد را متوقف نمیکنند.
۳. ایراد (Errors): این ایرادها اجرای کد را متوقف میکنند.
حتی با راه انداری نمایش خطاها باز شما میتوانید با انجام تغییراتی نحوه نمایش و یا سطح نمایش خطاها را کنترل کنید. بطور مثال با استفاده از تابع error_reporting( ) و پارامتری که فرستاده میشود میتوانید سطح نمایش خطاها را تغییر دهید. در زیر به پارامترها و تاثیراتشان توجه کنید:
نام پارامتر ثابت |
عمل |
E_ERROR |
نمایش خطاهای Fatal run-time errors و جلوگیری از اجرا |
E_WARNING |
نمایش اخطارهای Run-time warnings |
E_NOTICE |
نمایش توجه ها |
E_DEPRECATED |
نمایش اخطار در مورد کدهایی که در نسخه آینده کاربرد ندارند |
E_ALL |
نمایش همه خطاها، اخطارها و توجهها |
برای استفاده از این عبارات کافیست که آنها را در در داخل تابع به عنوان پارامتر قرار دهید مانند:
error_reporting (E_ALL)
نحوه کار این تابع به این شکل است که با توجه به پارامتر فرستاده شده، خطاهای مربوط به آن را نمایش میدهد. البته برای استفاده از این پارامترها میتوان از اعداد هم استفاده کرد که بخاطر تغییر این اعداد در نسخههای متفاوت پیشنهاد میشود که از همین عبارات استفاده کنید.
یکی از کارهایی که میتوانید انجام دهید قرار دادن تابع نمایش دهنده ایراد در یک فایل و استفاده از آن در هر کجا که خواستید با وارد کردن آن با استفاده از تابع include().
تکنیکهای رفع اشکال
مهمترین
قسمت در رفع اشکال همانا پیدا کردن آن است چرا که وقتی از محل ایراد آگاهی
پیدا کنید خیلی راحت میتوانید آن را بر طرف کنید. در زیر فهرستی از
مواردی که میتوانید برای حلوگیری و رفع ایراد انجام بدهید آورده شده است:
۱. هرگز علامت ; را در آخر هر دستور فراموش نکنید.
۲. توجه خود را جلب علامتهای دو تایی مانند "" و () کنید تا مشکل عدم تطابق پیش نیاید.
۳. از ترکیب علامت نقل قول تک ' ' و دوتایی "" در زمانهای مقتضی استفاده کنید.
۴. از Display_Errors در زمان لازم بهره ببرید.
۵. همیشه در کدهای خود از متنهای توضیح دهنده کد استفاده کنید.
آنچه در این درس گفته شد تکنیکهای سادهای برای یافتن و رفع ایراد بود. باید بدانید که اشکال زدایی یکی از اجزا جدا نشدنی برنامه نویسی و در حقیقت یک مهارت لازم میباشد که با کسب تجربه در برنامه نویسی به آن هم خواهید رسید.
در درس بعدی به سراغ تکنیکهای پیشرفته برنامه نویسی در پیاچپی خواهیم رفت.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.