سؤال

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

public function PrintStackTrace() {
    try {
        throw new Error('StackTrace');
    } catch (e:Error) {
        trace(e.getStackTrace());
    }
}

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

شكرًا!

هل كانت مفيدة؟

المحلول

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

var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

أيضًا، كما هو مذكور في الوثائق، يعمل هذا فقط في إصدار تصحيح الأخطاء من Flash Player، لذا يمكنك تغليف هذه الوظيفة في كتلة if التي تتحقق من قيمة Capabilities.isDebugger إذا أردت.

نصائح أخرى

من Flash Player 11.5، تتوفر أيضًا آثار المكدس في الإصدارات التي لا تحتوي على مصحح أخطاء للمشغلات أيضًا.

استخدم Flex DeBugger (FDB) الذي يأتي مع Flex SDK.إنه مصحح أخطاء سطر أوامر يسمح لك بتصحيح أخطاء .swf، حتى تلك الموجودة على الإنترنت (إذا كان إصدارًا لتصحيح الأخطاء).يسمح لك بتعيين نقاط التوقف، ومتغيرات الطباعة/التغيير، وتفريغ المكدس، و لا يتطلب منك إضافة أي رمز إضافي.أداة مفيدة للغاية لا ينبغي أن تكون بدونها!

خيارات fdb التي ستحتاج إليها هي "break" ولتحديد الفئة والخط الذي تريد إيقاف التنفيذ فيه، و"bt" أو "info stack" لتمنحك تتبعًا خلفيًا للمكدس.يمكنك أيضًا عرض كل شيء تقريبًا حول التطبيق أثناء تشغيله.

@hasseg صحيح.يمكنك أيضًا الحفاظ على معلومات تتبع المكدس في إصدار الإصدار (وليس تصحيح الأخطاء) عن طريق توفير -compiler.verbose-stacktraces=true عند تجميع ملف SWF الخاص بك.

لقد قمت بتجميع هذه الوظيفة الصغيرة:

public static function getStackTrace() : String
{
    var aStackTrace : Array = new Error().getStackTrace().split("\n");
    aStackTrace.shift();
    aStackTrace.shift();
    return "Stack trace: \n" + aStackTrace.join("\n");
}

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

var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

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

اعتبارًا من Flash 11.5، تعمل تتبعات المكدس في إصدار إصدار Flash.

ومع ذلك، هذا لا يعني أن هذه لم تعد مشكلة.إذا تم تعيين التطبيق الخاص بك لاستخدام مترجم أقدم من 11.5 بوصة Flash Builder --> Project properties --> ActionScript Compiler, ، لن يكون لديك آثار مكدسة.

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

ال getStackTrace تقوم الطريقة بإرجاع تتبع المكدس فقط على مشغل فلاش التصحيح (https://www.adobe.com/support/flashplayer/debug_downloads.html)، عند عودة اللاعب null.تأكد من تثبيت مشغل التصحيح وتشغيله.

ال -compiler.verbose-stacktraces=true يضيف رقم السطر فقط إلى تتبع مكدس التصحيح.

اختبار بسيط:https://Gist.github.com/pipeno/03310d3d3cae61460ac6c590c4f355ed

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top