Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. ActionScript

إصلاح الأخطاء في AS3: المقدمة

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called How to Fix Bugs in Flash.
Quick-Tip: Throwing Errors the Clean Way
Quick Tip: How to Debug an AS3 Error #1009

Arabic (العربية/عربي) translation by ansgaradh (you can also view the original English article)

في هذا البرنامج التعليمي ، سوف أصف بعض المعلومات الأساسية التي تحتاجها لتصحيح أخطاء تطبيقات الفلاش. لا يعد العثور على الأخطاء وحلها في ActionScript مهمة صغيرة ، لذا فإن هذه هي أول مقالة في سلسلة. في هذه الدفعة ، سنلقي نظرة على بعض الأمور العامة التي يمكنك القيام بها للمساعدة في تعقب أخطاءك.


أنواع مختلفة من الخطأ

أولا ، دعونا نناقش ما هو الخطأ. هناك ثلاث فئات واسعة من الأخطاء ، بدون ترتيب معين:

  • أخطاء مترجم
  • أخطاء وقت التشغيل
  • أخطاء منطقية

من أجل التفريق بين هذه ، من المفيد أن نفهم كيفية عمل SWF وعرضه.

في عملية إنشاء فيلم Flash (أو تطبيق ، أو أيًا كان ما تريد أن تسميته) ، تقوم بكتابة ActionScript وإنشاء أصول رسومية يستخدمها الفيلم. يمكنك استخدام برنامج Flash Professional أو Flash Builder و Flex Framework أو محرر جهة خارجية و IDE مثل FlashDevelop أو FDT. في جميع الحالات ، يُعرف العمل الذي تقوم به لإنشاء فيلمك بأنه التأليف ويشار إلى الوقت الذي تقضيه في العمل كوقت المؤلف .

في مرحلة ما ، سترغب في رؤية الأشياء التي قدمتها مؤلفتك كما تفعل للمستخدم النهائي. قبل أن تتمكن من مشاهدة هذا ، يجب أن يتم تجميع أصول المؤلفين (ActionScript والرسومات والصور والخطوط والنص وما إلى ذلك) في ملف SWF الذي يراه المستخدم النهائي. عندما تضغط على "نشر" أو "اختبار فيلم" في Flash ، أو "Run" في Flash Builder ، فإنك تقوم بتجميع SWF الخاص بك. سيستهلك البرنامج الذي تستخدمه للمؤلف أصول وقت المؤلف ويجمعها في ملف SWF. ويسمى الوقت الذي يستغرقه القيام بذلك وقت التجميع ، كما هو الحال في ، ويقال أن الأشياء التي تحدث في هذه المرحلة تحدث في وقت التجميع.

أخيرًا ، يمكنك تشغيل SWF في Flash Player ومعرفة كيف سيبدو ويعمل عند تقديمه. يحدث هذا في المتصفح الذي يحتوي على ملحق Flash Player ، أو مباشرة في Flash Professional عندما تختار "Test Movie" ، أو كتطبيق AIR يعمل على سطح المكتب (أو جهاز محمول). بغض النظر عن تفاصيل كيفية عرض SWF ، فإنه يعمل الآن ونحن نواجه الآن وقت التشغيل . يتم تنفيذ SWF بواسطة برنامج Flash Player ، وستكون جميع التعليمات البرمجية والرسومات المترجمة مرئية.

عادة ، كل هذا يحدث لك. إذا كنت تستخدم Flash Professional ، فإن اختيار "Test Movie" سيقوم بتجميع SWF ثم تشغيله في Flash Player الخاص به. إذا كنت تستخدم Flash Builder ، فسيؤدي اختيار "تشغيل" إلى تجميع ملف SWF ثم تشغيله في المتصفح. هذه العملية المكونة من ثلاث مراحل هي في العموم أمر لا تفكر فيه ، وهذا هو السبب في أنني أستغل الوقت لمناقشة الأمر بالتفصيل.

الآن ، على الأخطاء ، وكيف ترتبط بهذه المراحل.

أخطاء المحول البرمجي هي أخطاء في التعليمات البرمجية الخاصة بك المنبثقة في وقت التحويل البرمجي . هناك شيء خطأ جوهري في شفرتك بحيث يتوقف المحول البرمجي في مساراته ويقول "Whoah ، إذا واصلنا ، فسيتم إبطال SWF بشكل كبير. لا أستطيع فعلها حسناً ، حسناً ، إنه ليس عادةً ميلودراميكي ، لكنه سوف يكفيني في أول بادرة عن المتاعب والتأكد من عدم رضاك ​​عن رؤية صندوق SWF الخاص بك قبل إصلاح المشاكل.

هذه أخطاء في بناء الجملة بشكل عام - مثل الأقواس المفقودة أو التي تتشابه مع الخطأ - أو تكتب أخطاء غير صحيحة ؛ الأشياء التي يمكن للآلة أن تنظر إليها وتعرف أنها خاطئة. هذه هي الأخطاء التي سوف تراها في لوحة أخطاء برنامج التحويل البرمجي في Flash Professional.

The Compiler Errors Panel
لوحة أخطاء المحول البرمجي
The Compiler Errors Panel
لوحة أخطاء المحول البرمجي

أخطاء وقت التشغيل هي أخطاء تحدث أثناء تشغيل SWF. في هذه الحالة ، تكون الشفرة صحيحة من الناحية التركيبية ، حيث إنها تجاوزت المحول دون أخطاء (نعرف ذلك لأن SWF يعمل). لكن لا يزال هناك بعض الخلل في الكود الذي تسبب في تشغيله بطريقة لا يحبها Flash Player ؛ إما أنها لا تعرف ما يجب القيام به مع هذه النتيجة غير المتوقعة أو أنها تتسبب في خطأ لإعلامك أن شيئًا ما فشل في وقت التشغيل.

في هذه الحالات ، تحصل على خطأ رسمي يفصل المشكلة ويوضح على الأقل مؤشرًا عامًا لمكان حدوثها في الكود. في Flash Professional ، ستشاهد هذه عند "Test Movie" في لوحة Output.

A run-time Error in the Output Panel
خطأ وقت التشغيل في لوحة الإخراج

أخطاء منطقية هي في الأساس أخطاء في كيفية التحكم في البرنامج. هذه ليست أخطاء مترجم.يتم تجميع SWF وتشغيله. هذه ليست أخطاء وقت التشغيل. لم يلق Flash Player رسالة خطأ كبيرة في وجهك. كل شيء صحيح تقنياً ويعمل ، لكنه لا يعمل بالطريقة التي تريدها. ربما تحتوي الشبكة التي وضعتها برمجيًا على عدد كبير جدًا من الأعمدة ، أو لم يتم حساب إجمالي سلة التسوق بشكل صحيح ، أو تم التحقق من صحة عنوان البريد الإلكتروني الذي تم إدخاله من قِبل المستخدم على أنه غير مقبول في الواقع ، أو عرض سلسلة من الصور بترتيب خاطئ .

هذه هي أصعب الأخطاء التي يمكن العثور عليها ، لأنه لا يمكن العثور عليها إلا باستخدام SWF بالطريقة التي كان من المعتزم استخدامها ، ومقارنة النتائج الفعلية بشكل وثيق مع ما كنت تتوقع حدوثه. وفور العثور عليها ، لا تحصل على أي رسائل خطأ مفيدة تعطيك أي فكرة عن الخطأ.

Even though we got this far without compiler or run-time error, something is wrong: we're missing a zero on the price.
على الرغم من أننا وصلنا إلى هذا الحد بدون مترجم أو خطأ وقت التشغيل ، هناك خطأ ما: فنحن نفتقد الصفر على السعر.

أخطاء مترجم: البحث عن المشكلة

عادةً ما تكون أخطاء برنامج التحويل البرمجي أسهل طريقة للتعامل معها. هذا لأنه ، لأحد ، يتوقف المحول البرمجي في مساراته ويخبرك عن الخطأ ، وبالنسبة لخطأين ، يخبرك خطأ المحول البرمجي نفسه بالخطأ ، ويخبرك بالملف ورقم السطر ، بل ويطبع هذا الرمز من التعليمات البرمجية الخاصة بك مرجع.

تظهر أخطاء المترجم في لوحة أخطاء برنامج التحويل البرمجي ، لذلك دعونا نلقي نظرة فاحصة على هذا العنصر المحدد من IDE Flash:

The Compiler Errors Panel, Again
لوحة أخطاء برنامج التحويل البرمجي ، مرة أخرى

كما ترى في الرسم التوضيحي الموضح أعلاه ، يتم سرد كل خطأ على السطر الخاص به. كل سطر يتكون من نفس المعلومات الأساسية. في العمود الأول ، ستحصل على اسم الملف ورقم السطر الذي تم العثور على الخطأ فيه. في المثال أعلاه ، يحدث الخطأ في ملف فئة. إذا قمت بكتابة التعليمات البرمجية مباشرة في لوحة Script ، فستحصل على شيء مثل " Scene 1 ، Layer 'Layer 1' ، Frame 1 ، Line 1 " وهو الشيء نفسه ، فقط للشفرة التي لا تستند إلى ملف نصي.

من المفيد معرفة مكان حدوث الخطأ ، ولكن يحتوي العمود الثاني على معلومات حول سبب حدوث الخطأ. أول بت هو رقم الخطأ ، والذي يشبه المعرف. كل نوع من الخطأ يحصل على رقمه الخاص.ويتبع ذلك وصف نصي للخطأ. الآن ، لكي نكون منصفين ، فإن Adobe تحتوي على بعض الأوصاف المختصرة بألفاظ مصطنعة ، وفي المقالات المستقبلية في هذه السلسلة ، سنحاول فك رموز أكثر من تلك الشائعة بحيث يمكنك التعامل معها بمزيد من الفعالية. حتى ذلك الحين ، يمكننا على الأقل معرفة أن رقم الخطأ مرتبط بوصف الخطأ. قد يتم تخصيص النص الموجود في الوصف لتقديم بعض الملاءمة السياقية ، مثل استخدام المتغير أو اسم الوظيفة من شفرة المصدر ، ولكن الخطأ العام مرتبط بالرقم. على سبيل المثال ، خطأ 1067 هو خطأ إكراه ، بغض النظر عن ما إذا كان الإكراه من سلسلة إلى DisplayObject أو من صفيف إلى ExternalInterface.

يمكن العثور على قائمة كاملة بالأخطاء المطمئنة في هذه الصفحة من وثائق Adobe's ActionScript:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/compilerErrors.html

يتم إعطاء بعض الأخطاء تفسيرات أكثر شمولاً في هذه الصفحة.


أخطاء مترجم: حل المشكلة

إن الشيء العظيم في أخطاء المترجم هو سهولة العثور عليه. ليس فقط أنها تنبثق وتمنعك من تشغيل SWF الخاص بك ، ولكن يمكنك الحصول على رمز مزعج بسهولة من لوحة أخطاء برنامج الترجمة. ما عليك سوى النقر نقرًا مزدوجًا فوق أي خطأ في اللوحة وسيتم فتح الملف المصدر ذي الصلة ، مع وضع المؤشر على الخط الأيمن. الآن ، إذا كنت تستخدم Flash Professional مع محرر خارجي ، فستجد نفسك بالنقر المزدوج فوق طريقك لتحرير الملف في Flash Professional. قد يكون هذا ضد أسباب استخدامك محررًا خارجيًا ، ولكن عملية اكتشاف الأخطاء عادة ما تكون سريعة إلى حد ما ويمكنك الحصول عليها بسهولة. حتى إذا كنت تستخدم CS5 مع دمج Flash Builder ، فإن النقر المزدوج فوق الخطأ يؤدي إلى إظهار الملف في Flash Professional ، وليس Flash Builder. ولكن يحتوي Flash Builder على لوحة خطأ مترجم خاصة به ، والتي تعمل بنفس الطريقة.

The Flash Builder Compiler Errors panel, or the "Problems" panel
لوحة Flash Builder Compiler Errors ، أو لوحة "Problems"

في هذه المرحلة ، يتعلق الأمر بالانتقال إلى سطر الكود المحدد بواسطة الخطأ ، وإصلاحه.


أخطاء وقت التشغيل: البحث عن المشكلة

بمجرد المرور بأخطاء برنامج التحويل البرمجي ، سيتمكن SWF من العمل ، ولكن عند هذه النقطة قد تواجه أخطاء في وقت التشغيل. يحدث ذلك لأي عدد من الأسباب - مرة أخرى ، سنستكشفها لاحقًا في هذه السلسلة - ولكن الآن ، دعنا نستكشف التشريح لخطأ وقت التشغيل. فيما يلي خطأ وقت التشغيل المعتاد كما هو معروض أثناء تشغيل SWF من "Test Movie" في Flash Professional:

The Output panel displaying a run-time error
لوحة الإخراج تعرض خطأ وقت التشغيل

من المحتمل أن يكون هناك الكثير من النص يبصقون عند ظهور خطأ ما. قد يبدو الأمر مخيفًا في البداية ، ولكنه في الحقيقة قسمان رئيسيان فقط:

The two main sections of the run-time error
القسمين الرئيسيين من خطأ وقت التشغيل

وكما هو موضح أعلاه ، فإن الجزء الأول من الخطأ هو وصف ما حدث. مثل أخطاء وقت التحويل البرمجي ، يحتوي كل نوع من أنواع خطأ وقت التشغيل على رقم خطأ ، والذي يرتبط مع وصف نصي قصير. يتضمن الوصف نوع خطأ بالإضافة إلى جملة nerd-speak. قد يكون نوع الخطأ مفيدًا للحصول على إحساس واسع بما يحدث ، ولكن الوصف هو ما يخبرك به بالفعل. سنلقي نظرة على مثال قريب.

والجزء الرئيسي الثاني هو أي نص يتبع البتة الأولى ، يسمى مسار المكدس أو مكدس الاستدعاءات وسوف نتعمق في ذلك في الخطوة التالية.

مثل أخطاء وقت التحويل ، فإن الأوصاف النصية تترك قليلا لتكون مرغوبة. وبمجرد الحصول على مؤشر على ما تعنيه بعض الأخطاء الأكثر ظهوراً ، سيكون لديك فكرة عما هو خاطئ وستعرف أين تبحث.

يتم توثيق قائمة كاملة من أخطاء وقت التشغيل هنا ، يحتوي بعضها على ملاحظات معها:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/runtimeErrors.html


أخطاء وقت التشغيل: فهم "تتبع المكدس"

دعونا ننتقل إلى الجزء الثاني من الخطأ وقت التشغيل ، تتبع المكدس . ويمكن أن يتراوح طوله في أي مكان من خط واحد إلى عدد محدود للغاية من الخطوط. الغرض من هذا تتبع المكدس هو إعلامك بالمكان الذي حدث فيه الخطأ في رمزك.

يمثل كل سطر في تتبع المكدس تنفيذ دالة واحدة. يقوم اسم السطر العلوي بتسمية الدالة التي حدث فيها الخطأ بالفعل ؛ أنه يحتوي على سطر من التعليمات البرمجية التي فجرت كل شيء. يسرد السطر الثاني في تتبع المكدس الدالة التي تسمى الدالة التي تسببت في الخطأ. يسرد السطر الثالث الدالة التي تسمى الدالة التي تسمى الدالة التي حدث فيها الخطأ. و ... أنت تحصل على الفكرة. لكن دعنا نوضح ذلك بشكل أكثر عمليا. في التعليمة البرمجية التالية ، سيتسبب الدالة الثالثة خطأ وقت التشغيل عن طريق محاولة إضافة "لا شيء" إلى قائمة العرض. ومع ذلك ، نحن لا نسميها على الفور. نبدأ الأمور عن طريق استدعاء الوظيفة الأولى ، والتي تستدعي الوظيفة الثانية ، والتي بدورها تستدعي في النهاية الوظيفة الثالثة :

إذا قمت بلصق هذا الرمز في لوحة Script بملف Flash جديد ، وقمت بتشغيله ، فستشاهد الخطأ التالي:

الآن ، نحن نعرف أن الخطأ كان بسبب إرسال متغير Sprite غير مهيأ إلىaddChild . الدالة التي أخطأت في الواقع الخطأ (وهذا هو المصطلح التقني ؛ عند حدوث خطأ ، فهذا يعني أن الخطأ تم طرحه بواسطة سطر معين من التعليمات البرمجية. أحب أن أفكر في الأمر على أنه مشابه لرمي نوبة غضب) هو أسلوب addChild ، وبالتالي فهو في أعلى القائمة. السطور الثلاثة التالية هي الوظائف التي كتبناها ، المدرجة في القائمة الأحدث. ينتهي (أو يبدأ ، اعتمادا على كيفية النظر إليه) بمكالمة الإطار 1 في المخطط الزمني الرئيسي. هذه هي الطريقة التي تنطلق من SWF. إذا تم إعداد فئة مستند ، فسترى ذلك بدلاً من ذلك. منذ أن استخدم هذا المثال برنامج نصي في الإطار الأول ، نحصل على frame1 .

النقطة هي أن استدعاء frame1 في النهاية أدى إلى استدعاء خاطئ إلى addChild، ويمكنك اتباع هذا المسار من المنطق عن طريق قراءة تتبع المكدس.

قد تظهر هذه القائمة الكاملة للمكالمات الدالة مجرد فوضى من المعلومات التي لا تحتاج إليها ، ولكن هناك عدد من المرات عندما يمكن أن تساعدك على تضييق الخلل. إذا حدث الخطأ فقط في الوظيفة المعينة في بعض الأحيان ، قد تتمكن من معرفة المشكلة عن طريق تتبع الخطوات المتخذة للوصول إلى الوظيفة. على سبيل المثال ، إذا كان هناك تفاعل أكثر قليلاً في الوظائف:

و الثالثة قد تكون وظيفة المجرم الأكثر إلحاحا، ولكن دراسة دقيقة تكشف أن الثانية الوظيفة هي التي جعلت قيمة s فارغة.


أخطاء وقت التشغيل: فلاش لاعب التصحيح

الأداة الأساسية لمطور فلاش هي إصدارتصحيح من لاعب فلاش. إذا لم تكن قد قمت بتثبيتها بالفعل ، فعليك التوقف عن ما تفعله (قراءة هذه المقالة) والانتقال إلى تنزيلها الآن. سيتعين عليك إعادة تشغيل المتصفح ، نظرًا لأنه إعادة تثبيت برنامج لاعب فلاش ، لذا ضع إشارة على هذه الصفحة أولاً!

انتقل إلى هنا لتنزيل أداة التثبيت المناسبة:

http://www.adobe.com/support/flashplayer/downloads.html

(مستخدمو Chrome: اقرأ مذكرة الدعم هذه لمعرفة كيفية تجاوز لاعب فلاش المدمج في Chrome.)

بمجرد إعادة تشغيل المتصفح ، لن تلاحظ الكثير على الفور. ولكن جربه على هذا المنتدى أدناه. أولاً ، سترى بعض النصوص التي تشير إلى إصدار Flash Player الحالي ، بما في ذلك ما إذا كان إصدار التصحيح أم لا. ولكن انقر فوق الزر الكبير ، الذي يتم وصله إلى وظيفة تؤدي في النهاية إلى حدوث خطأ. إذا جربت ذلك بدون مشغل debug ، فلن ترى أي شيء يحدث. سيحدث الخطأ ، ولكن سوف تفشل بصمت. إذا حاولت ذلك باستخدام مشغل تصحيح الأخطاء ، فستتلقى رسالة خطأ فظة وقوية يصعب تفويتها:

إذا كنت تشعر بأنك غير قادر على تثبيت مشغل التصحيح ، أو تريد التحقق من أنك فعلت ذلك بشكل صحيح ، فإن الخطأ الذي تشاهده يجب أن يبدو كالتالي:

The error window displayed when the debug player is installed.
نافذة الخطأ المعروضة عند تثبيت مشغل التصحيح.

من الواضح أن تثبيت مشغل تصحيح مفيد للغاية ليتم تنبيهك بالأخطاء أثناء اختبار ملفات SWF في المتصفح. كما قد تتخيل (أو قد لاحظت بالفعل) ، فإن SWF الذي يعمل على ما يرام من فلاش IDE قد يجد شيئًا يشكو عند وضعه في بيئة مختلفة ، مثل خادم الويب الخاص بك. تخيل أن SWF يعتمد على ملف XML ليتم تحميله ، ولكن إذا تم حل المسار إلى ملف XML بشكل غير صحيح على خادم الويب مقارنة ببيئة التطوير المحلية ، فسيحدث خطأ في التحميل.سيكون من المفيد بالتأكيد معرفة ذلك بمجرد حدوثه ، بدلاً من تقديمه إلى صندوق عمل سياسي لا يعمل ولا توجد أدلة.

الجانب السلبي إلى لاعبتصحيح هو أنه بالأحرى كل شيء أو لا شيء؛ لا يمكنك تصحيح أخطاء المواقع التي لا تطورها. بمعنى ، إذا كنت تتصفح الويب فقط ، فستؤدي في النهاية إلى حدوث بعض أخطاء وقت التشغيل في ملفات SWF أخرى. إنه أمر مزعج ، ويعطيك فكرة عن مدى اهتمام بعض مطوري البرامج بعملية اختبارهم.

كقصة إضافية ، يمكنك بسهولة معرفة ما إذا كان لديك الإصدار العادي أو التصحيح للاعب بمجرد النقر بزر الماوس الأيمن على أي ملف SWF والبحث عن خيارات "إظهار منطقة اعادة رسم" و "المصحح" في ذلك:

The Flash Player context menu, when invoked from a debug player
قائمة سياق لاعب فلاش ، عند استدعاؤها من مشغل تصحيح الأخطاء

أخطاء وقت التشغيل: اجازة التصحيح

سواء كنت تشاهد أخطاء وقت التشغيل في IDE أو في المستعرض ، فإن الخطأ يكون مفيدًا لنقطة معينة. إذا كان لديك خطأ يحدث في مكان ما في إحدى الوظائف ، إلا أن هذه الوظيفة قد تصل إلى 20 سطرًا ، فقد تواجه مشكلة صغيرة في تحديد مكان سطر الشفرة المسيء.

هناك نوعان من التقنيات التي لها نفس النتائج ، في أن يتم توفير مزيد من المعلومات في شكل سطر من التعليمات البرمجية في السؤال عن كل استدعاء وظيفة.

هذه التقنية الأولى هي الأكثر إلحاحا: بدلا من الضغط الأوامر عودة / مراقبة-أدخل لاختبار الفيلم الخاص بك، اضغط على قيادة التحول عودتهم / التحكم-التحول-أدخل إلى تصحيح الفيلم الخاص بك. يؤدي هذا إلى تشغيل SWF في برنامج فلاش لاعب التصحيح ، مع بدء جلسة تصحيح الأخطاء. عندما يتم تشغيل خطأ وقت التشغيل ، سترتد مرة أخرى إلى فلاش IDE (الذي يجب إعادة تكوين نفسه في مساحة عمل تصحيح) ، وسترى المزيد من المعلومات في تتبع المكدس (لاحظ على وجه التحديد أرقام الأسطر المضافة إلى الإخراج أدناه):

كمكافأة ، إذا كان ذلك ممكناً ، سيقوم فلاش بفتح الملف المسؤول عن رمي الخطأ ، والإشارة إلى السطر المعني. تحدث العديد من الأخطاء المضمنة داخل الطبقات المضمنة ، ولذلك لا يمكن عرض هذا الرمز. ولكن إذا كنت ترغب في مشاهدته بشكل عملي ، فجرّب الشفرة التالية:

... وتشغيله من خلال حركة التصحيح. يجب استدعاء السطر 7.

كما ناقشنا ، على الرغم من ذلك ، تحتاج في بعض الأحيان إلى إجراء اختبار على الخادم ومن خلال متصفح ، كما أن تسهيلات تصحيح الأخطاء في IDE فلاش تكون أقل فائدة في هذا الصدد. مع مشغل التصحيح الذي قمنا بتثبيته في الخطوة الأخيرة ، توجد طريقة للحصول على معلومات رقم السطر المضمنة في إطار خطأ وقت التشغيل. هذا بسيط مثل تمكين خيار النشر.

في مستند فلاش ، اختر ملف> نشر الاعدادات… ثم انقر فوق علامة التبويبفلاش . باتجاه الأسفل ، أسفل العنوان "متقدم" ، سترى خيار خانة اختيار للتصحيح التصحيح . تأكد من تمكين هذا ، ثم انقر فوق "موافق".

The Permit Debugging option in the Flash Publish settings
خيار تصحيح التصريح في إعدادات فلاش نشر

انشر ملف SWF مرة أخرى ، وافعل ما يلزمك لتشغيله في المتصفح مرة أخرى. عند حدوث خطأ في وقت التشغيل الآن ، سترى نفس معلومات رقم السطر.

Runtime error in the browser, with line numbers
خطأ وقت التشغيل في المستعرض ، مع أرقام الأسطر

لن تحصل على القدرة على الانتقال إلى شفرة المصدر ، ولكن يمكن لخريطة هذا الرقم أن توفر لك مجموعة من الوقت في تعقب الأخطاء.

ومع ذلك ، كن حريصًا على إيقاف تصحيح الأخطاء عند الاستعداد لنشر SWF على العالم.يحتاج فلاش إلى إضافة معلومات إضافية إلى SWF من أجل توفير أرقام الأسطر ، وحجم الملف الناتج من SWF عادة ما يكون أعلى بنسبة 25 - 50٪ من المعتاد. إنها أداة تصحيح أخطاء مفيدة ، ولكنها ليست شيئًا يجب عليك تشغيله لكل شيء في كل مكان.


أخطاء وقت التشغيل: ارميها بنفسك

لقد ذكرت من قبل أنه من الممكن رمي الأخطاء الخاصة بك (ونوبات الغضب الخاصة بك ، ولكن سأصف فقط كيفية القيام بالأول). هذا يمكن أن يكون تقنية مفيدة في التصحيح. إذا ، على سبيل المثال ، لديك الوظيفة التالية:

وتُعد هذه الوظيفة جزءًا لا يتجزأ من وظائف باقي الفيلم (على افتراض أنه لا يمكننا المضي قدمًا في الجزء المستند إلى XML إذا لم يتم تحليل XML) ، فمن المحتمل أن تكون في حالة من الأحداث غير السارة إذا كان XML الكائن الذي يتم تمريره إلى الدالة كائن فارغ ، أو ربما لا يتوافق مع البنية التي تتوقعها.

لذلك ، يمكنك أن تضع في اعتبارك ، في هذه الوظيفة الهامة ، إعداد بعض الشيكات ، وإذا فشلت الشيكات ، ألق بعض الأخطاء. يمكن أن يكون الأمر بهذه البساطة:

بالمعنى الدقيق للكلمة ، قد تحتاج إلى استخدام ArgumentError بدلاً من الخطأالقديم عادي ولكن النتيجة هي نفسها بشكل أساسي. إذا قمت بتشغيل هذا الرمز:

سترى خطأً مفيدًا:

The runtime error
خطأ وقت التشغيل

بالإضافة إلى ذلك ، قد تتوقع أن XML قد لا يكون فارغًا ، ولكن قد يتم تعديله بطريقة لا تتوافق مع توقعات دالة التحليل. إذا كنت بحاجة إلى عقدة باسم <إدخالات> المراد ملؤها بالعقد الفرعية المسماة <entry> ، ولكن بسبب خطأ بشري ، يبدو ملف XML كما يلي:

ثم لن يعمل التحليل. يمكنك حماية ضد هذا:

ويجب أن تحصل على هذا الخطأ:

Another helpful run-time error
خطأ وقت آخر مفيد

قد تقوم فقط بحفظ نفسك أو شخص آخر ، بعض الوقت أسفل الخط عند تحرير ملفات XML بشكل غير صحيح.


أخطاء وقت التشغيل: الحصول على تتبع المكدس بدون خطأ

أحيانًا يكون تتبع المكدس مفيدًا بحد ذاته ، حتى إذا لم يحدث أي خطأ. على سبيل المثال ، بين الحين والآخر أجد نفسي مع طريقة يتم استدعاءها في كثير من الأحيان أكثر مما أعتقد أنه ينبغي. إذا تمكنت فقط من معرفة أي طرق أخرى تسميها ، فعندئذ يمكنني العثور على مصدر المكالمة الإضافية.

للوهلة الأولى ، قد يبدو رمي الأخطاء حلا مناسبا. ولكن يميل الخطأ إلى إيقاف فيلم فلاش في مساراته. إذا أعطاني الخطأ الأول عملية تتبع مكدس ، فقد يمنع ذلك المكالمة الثانية من الحدوث لأن الخطأ الأول يمنعها. في هذه الحالات ، من الجيد معرفة المزيد عن كائنات الخطأ .

الأكثر فائدة هو الأسلوب getStackTrace ، الذي يقوم بإرجاع تتبع مكدس الذاكرة المؤقتة كما سيتم تقديمه كان الخطأ الذي يتم طرحه. ومع ذلك ، فإن الشيء الجميل هو أنه لا يلزم أن يتم طرحها بالفعل للحصول على هذه المعلومات. لذا ، إذا كنت ببساطة مهتمًا برؤية تتبع الرصة دون حدوث أخطاء ، فيمكنك فعل شيء كالتالي:

إذا عرضت هذا في فلاش IDE ، فسيكون من الصعب اكتشاف الاختلافات بين هذا الخطأ والخطأ ؛ سيقوم كلاهما ببساطة بإنتاج مجموعة من المعلومات إلى لوحة الإخراج. قد تفكر في تتبع التتبع لتسهيل معرفة الفرق. إذا كنت تختبر في المتصفح ، فإن هذا التعليمة البرمجية لن تقدم نافذة الخطأ ، ولكن ببساطة اكتب إلى سجل الفلاش للاطلاع عليها (أنا أتقدم على نفسي ، فالتتبع من المتصفح يتم تغطيته في بضع خطوات) .


تتبع هيك من كل شيء

عند الحديث عن الآثار ، عندما يتعلق الأمر بالتصحيح ، فإن التتبع هو أفضل أداة متوفرة لديك.بالتأكيد ، يحتوي كل من Flash Professional و Flash Builder على مصححات ، والتي تتيح لك تعيين نقاط التوقف والخطوة من خلال التعليمة البرمجية وفحص المتغيرات ، ولكن بأمانة تامة ، أجد أسرع طريق بين الأخطاء وجمع معلومات كافية لإصلاحها هي حفنة من التعقيدات الموضوعة بشكل حكيم . تُعد التتبعات مفيدة لتصحيح أخطاء وقت التشغيل والأخطاء المنطقية ، ولكن نظرًا لأن لدينا أدوات متوفرة للحصول على معلومات حول أخطاء وقت التشغيل ، يمكن أن تكون التعقّب خط الدفاع الأول ضد الأخطاء المنطقية.

إذا قمت بتصحيح خطأ منطقي ، فأنا أعلم عادةً بمكان التركيز. عادة ما يتم ترجمة الشيء الذي لا يعمل إلى فئة أو اثنتين ، وعادة إلى عدد قليل من الأساليب والخصائص. لذلك ، في مناطق المشاكل المحتملة ، أتعقب من كل شيء.

أكثر من الناحية العملية ، أميل إلى القيام بما يلي:

  • ضع أثرًا كإعلان أول داخل دالة أو طريقة ، بالإضافة إلى مخرجات أي معلمات ، فقط للتأكد من أن يتم استدعاء الدالات والمعلمات هي ما أتوقع أن تكون عليه.
  • تتبع أي متغير أو خاصية يتم استخدامها في الوظيفة ، مرة واحدة على الأقل. إذا كانت الخاصية عرضة للتغيير أثناء الوظيفة ، فضع أثرًا قبل التغيير المحتمل وبعده.
  • تتبع أي عبارات مشروطة ، فقط للإشارة إلى الفرع الذي تحصل عليه.
  • تتبع كافة التكرارات من الحلقات ، عادةً مع بعض المعلومات حول التكرار (مثل رقم الفهرس و / أو الكائن من المصفوفة ذات الصلة بالتكرار)
  • إذا كان المتغير عبارة عن كائن معقد ، مثل Sprite أو صوت ، فتتبع عدة خصائص للكائن

كقاعدة أسلوبية ، أجد أنه من المفيد للغاية التأكد من أن التتبع يحمل علامة أيضًا. هذا هو شيء من هذا القبيل:

بهذه الطريقة، وبعد الانتهاء من إضافة اثني عشر آثار إلى رمز الخاص بك، يمكنك تحديد واحد الذي يقول باطلا بين جميع آثار أخرى أكثر سهولة.

بالإضافة إلى ذلك ، قد ترغب في إضافة اسم الفئة (والطريقة) في علاماتك ، فقط للمساعدة في تحديد مصدر كل أثر.

لا توجد قواعد صارمة وسريعة لتتبع ، فقط توصيتي العامة لتتبع كل شيء ، حتى الأشياء التي تعتقد أنك لا تحتاج إليها ، فقط للتأكد. عند هذه النقطة ، فإن السؤال المطروح على القراء مناسب: ما هي تقنيات التتبع التي تعتمد عليها؟ لا تتردد في بدء حرب اللهب في التعليقات.

[ملاحظة المحرر: من فضلك لا تبدأ حرب اللهب في التعليقات.]


تتبع: تتبع من المتصفح

ميزة أخرى لمشغل التصحيح (إلى Flash Developer ، بالطبع) هي القدرة على رؤية آثارك من المتصفح ، بحيث يمكنك اختبار وتصحيح SWF بشكل أكثر فاعلية في بيئته الطبيعية.

لسوء الحظ ، يجب اتخاذ خطوات لتمكين هذا التتبع ، ولن أكرر ما تمت كتابته في مكان آخر.سيؤدي البحث على "تتبع تصحيح أخطاء الفلاش" إلى تقديم العديد من المقالات الإرشادية ، والتي يكون أحدها المفضل في أعلى القائمة على Google ، وهي مقالة مفصلة علىyourpalmark.com تغطي إصدارات مختلفة من المشغل على Mac و Windows وأنظمة لينكس.

سأقوم بإضافة تلميح لمستخدمي Macintosh. تم ذكر تطبيق Console بالمرور في المقال المرتبط ، ولكن لم يتم شرحه بالفعل أو ، في رأيي ، تم استخدامه بشكل صحيح. يتم تثبيت وحدة التحكم مع نظام التشغيل Mac OS X ، وتتواجد في مجلد / Applications / Utilities. انها مثالية لعرض ملفات السجل ، والتي هي آثار لاعب التصحيح الخاص بك في الواقع. إنه أمر ذكي حول التمرير إلى الأسفل إذا كنت بالفعل في الأسفل ، ولكن ليس التمرير إذا لم تكن. من السهل تصفية السجل والبحث فيه ، وأجد أنه لا غنى عنه لتطوير الفلاش.

The Mac's Console application in use for Flash traces
تطبيق Mac's Console المستخدم لتتبع Flash

خدعة، ومع ذلك، هو أنه في حين أن وحدة التحكم فتح أي ملف نصي، إلا يتذكر الملفات إذا كانوا في مواقع ملفات السجل القياسية على النظام الخاص بك، و إذا كانت .LOG الملفات. ومع ذلك ، فإن مشغل Flash debug يقوم بالكتابة فقط إلى ملف يسمى flashlog.txt ، والذي يوجد في موقع ملف السجل غير القياسي. هناك أمر طرفي بسيط يمكنك إصداره لإنشاء رابط رمزي في المكان المناسب:

كتبت المزيد عن هذه الخدعة على مدونة فلاش الخاصة بشركتي هنا:http://summitprojectsflashblog.wordpress.com/2008/12/17/leopards-console-and-flash-debug-player-traces/


المصحح الفلاش

كما ذكرنا سابقًا ، يوفر كل من Flash Professional و Flash Builder بيئات مصحح الأخطاء. شخصيا ، أجد هذه ذات فائدة محدودة ، لأنني أفضل الاعتماد على آثار وأخطاء وقت التشغيل. كذلك ، يعتمد استخدام مصحح الأخطاء بشكل فعال على القدرة على تعيين نقاط التوقف ، والتي يمكن فقط (بسهولة) القيام بها في التعليمات البرمجية المفتوحة في Flash Professional أو Flash Builder. كمسألة تفضيل شخصي ، أستخدم TextMate كمحرر اختياري ، مما يجعل ضبط نقاط التوقف أمرًا مرهقًا. سأكون مقصرا ، على أية حال ، إذا لم أذكر المصحح Flash في مقال حول Flash debugging.

في ما يلي جولة سريعة لأدوات تصحيح الأخطاء التي تحصل عليها باستخدام Flash Professional. دعنا نرجع إلى خطأ وقت التشغيل الخاص بنا لإنتاج مثال سابق. الصق هذا الرمز في لوحة البرنامج النصي لملف Flash:

قبل النقر على Debug Movie ، على الرغم من ذلك ، انقر على يمين الرقم "5" في لوحة Script.

The breakpoints column
العمود breakpoints

ستظهر نقطة حمراء في العمود ، تشير إلى أنه قد تم تعيين نقطة توقف. لإزالة نقطة توقف ، انقر فوقها مرة أخرى. مع تعيين نقطة التقطع على السطر 5 (حيث يتم استدعاء الثانية داخلأولاً ) ، انتقل إلى Debug the Movie. الآن ، نتوقع أن تتولى مساحة تصحيح الأخطاء المسؤولية بسبب الخطأ ، ولكن إذا لاحظت ما يحدث ، فإن الخطأ لم يحدث بالفعل (حتى الآن). هناك سهم أصفر يشير في السطر 5 ، يشير إلى أن تنفيذ البرنامج متوقف مؤقتًا عند نقطة توقف لدينا. عند هذه النقطة ، لدينا القدرة على المرور عبر الكود سطر واحد في كل مرة ، وفي هذه العملية تفقد قيمة المتغيرات ، مما يساعدنا في العثور على الخطأ.

We've hit the breaking point
لقد وصلنا إلى نقطة الانهيار

انقل انتباهك إلى لوحة المتغيرات ، في الزاوية اليمنى السفلى.

The Variables panel
لوحة المتغيرات

قم بفتح هذا الإدخال ، وستظهر قائمة متداخلة لكل الخصائص التي تنتمي إلى " هذا " ، وهو الإطار الزمني الرئيسي لملف SWF الخاص بنا. مرر لأسفل وسترى " s " ، متغيرSprite الخاص بنا . قد تحتاج إلى جعل اللوحة أوسع ، ولكن يجب أن يكون للعمود الثاني قيمة في ذلك ، مثلflash.display.Sprite ، مشيرا إلى أنه يحتوي على قيمة.

The Variables panel, with the s variable exposed
لوحة المتغيرات ، مع متغير s مكشوف

لاحظ أنه يمكن استخدام هذه اللوحة لفحص القيمة الحالية في أي خصائص في وقت إيقاف الفيلم مؤقتًا. لاحظ أيضًا أنه بينما يتم إيقاف الفيلم مؤقتًا ، يمكنك النقر نقرًا مزدوجًا فوق بعض حقول القيمة وكتابة القيم الجديدة. سيعمل هذا فقط على القيم البدائية مثل String s و Number s ، ولكنه تقنية يدوية يجب معرفتها.

الآن ، حرك عينيك إلى لوحة Debug Console. هذا هو المكان الذي يمكننا من خلاله التحكم في إيقاف الشفرة وتنفيذها. في الجزء العلوي من لوحة هي سلسلة من الأزرار. ابحث عن هذا:

The Step In button
زر الخطوة

انقر مرة واحدة ، وستلاحظ أن السهم الأصفر تقدم من السطر 5 إلى السطر 7. وهذا يشير إلى ما حدث ؛ لقد قمنا بتنفيذ الخط 5 بالكامل ، والذي يتضمن اتصالًا بالوظيفة المعلنة في السطر السابع. الخطوة التالية في برنامجنا هي استدعاء هذه الوظيفة. تحقق من متغير s الخاص بنا في لوحة Variables. يجب أن يحتوي على قيمة Sprite .

انقر فوق الزر " الخطوة في" مرة أخرى. يجب أن يشير السهم الأصفر إلى السطر 8 ، حيث يتم تعيين s إلى قيمة null . ومع ذلك، إذا كنت تفقد وحة المتغيرات مرة أخرى، فسوف ق لا يزال لديه قيمة. هذا لأننا متوقفون مؤقتًا عند السطر 8 ، ولكن قبل أن يتم تشغيل السطر 8 فعليًا.

انقر فوق الزر Step In مرة أخرى ، ومع السهم الأصفر الموجود الآن في السطر 8 ، قم بفحص الخاصية s في لوحة Variables. يجب الآن أن تكون خالية . إذا كان هذا المثال ليس بهذه البساطة، قد يكون لدينا الآن الوحي من أن الرمز نفذنا فقط هو المسؤول عن اغية -ing ممتلكاتنا، والذي بدوره يؤدي خطأ لدينا.

في هذه المرحلة ، نحن راضون لأنفسنا أن هذا هو سبب الخطأ ، لذلك ليس هناك حاجة للحفاظ على التنقل عبر الكود. يمكننا الضغط على الزر " متابعة" الأخضر ، والذي سيستأنف التنفيذ العادي ، ومن ثم يجب أن تشاهد الخطأ الذي يحدث.


تغليف

كما قالوا في الثمانينيات: الآن أنت تعرف ، والمعرفة هي نصف المعركة. الآن يجب أن تعرف بعض تقنيات تصحيح الأخطاء وربما تعلمت لماذا تظهر بعض الأخطاء في أماكن مختلفة.

لسوء الحظ ، فإن معرفة حقائق تصحيح الأخطاء لا يزال نصف المعركة فقط. النصف الآخر هو أكثر صعوبة في الكتابة عنه في البرنامج التعليمي. النصف الآخر هو أكثر عن التجربة والحدس. بعد إصلاح المئات من الأخطاء ، ستبدأ في التعرف على سبب خطأ ما. أنت أيضا بحاجة إلى معرفة خصوصيات وعموميات ActionScript - الفروق الدقيقة إلى حد ما - من أجل فهم الخطأ الذي كنت أقسم أنه لا ينبغي أن يحدث.

ما أتمناه هنا هو جعل بداية النصف الأول من المعركة أسهل ، بحيث عندما تواجه أخطاء حقيقية في مشاريعك في العالم الحقيقي ، يمكنك التلاعب في طريقك خلال الشوط الثاني أكثر من ذلك بقليل بأناقة.

أخيرًا ، ابحث عن سلسلة من نصائح التصحيح السريعة. توفر هذه المقالة الأساسات العامة التي سيتم الرجوع إليها بواسطة "نصائح سريعة" في المستقبل. ستتركز النصائح السريعة الفردية على نوع معين من الأخطاء ، وعادةً ما يكون شائعًا ، حيث سيطرح عليك Flash ، وكيف تعتني به عند حدوثه.

سنراكم هناك ، ونشكرك على القراءة.

[ملاحظة المحرر: مجد لليوري آركس لصورته رجل الأعمال الغاضب ، متوفرة على PhotoDune.]

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.