пʼятниця, 15 жовтня 2010 р.

Підказка для лінивих:

Ситуація: у вас баг. Трейс, дебаг, відтворення... результат - якась функція викликається 2 рази підряд. Або більше, ніж має, або в тих умовах, в яких вона не повинна викликатись (до ініціалізації). І все дуже складно - дуже багато різних подій, потенційних місць виклику функції і просто лінь )))) - що неможливо визначити зразу звідки йде косячний виклик. Зато умову, коли виклик функції відбувається неправильно, перевірити можна майже завжди, ну хоча б тупо поставивши лічильник. От в цю умову і пихаєм такий простий код:

var spr: Sprite;
spr.alpha = 1;

Що станеться при виконанні цього коду? - помилка. А що відобразиться у вікні флешплеєра про цю помилку? - правильно: те, що нам потрібно - повний шлях виклику нашої нещасної функції.

5 коментарів:

  1. А джавістам за таке треба руки відривати, і до попи пришивати
    кхе...
    сорі)
    А хіба нема штатного засобу виводити кудись тупо трейс?
    В джаві вбахав вивести стактрейс в лог, і маєш щастя. І ніяких ексепшенів...

    ВідповістиВидалити
  2. трейс тобі підкаже ВЕСЬ шлях його виклику?

    у нас такого нема.

    ВідповістиВидалити
  3. Ну так повний шлях виклику і є стектрейс. Так, він доступний у джаві. Навіть цілий масив стектрейсів. Є ще один доволі топорний метод:


    new Throwable().getStackTrace();

    чи ше хужеє

    new Throwable().printStackTrace();


    це створює еrctgiy, fле не кидає його ніде, а просто тягне стрінг зі стектрейсом. Ізі.

    А хіба у екшнCкріпті не можна написати шось типу

    throw new Error("Aaaaaa!");


    чи якось ше?



    Але буває і так, що виклик методу іде через інтроспекцію на купу з рефлексією в абстрактних чергах рантайм-об’єктів, або ще як (господи, чого тільки дівелопери не видумують щоб легше писалось).
    Тоді стактрейс веде в невідомий об’єкт, який фіг зна чого цю функцію викликав. Отоді да.

    ВідповістиВидалити
  4. *еrctgiy, fле
    ото пофіксав)

    *ексепшн, але*

    ВідповістиВидалити
  5. в as3 є аналогічний getStackTrace() в об'єкта еррор, який ловиться трай-кетчем
    тільки чомусь всім більше подобається хардкодить

    ВідповістиВидалити