Макрос компилятора ActionScript 3.0 для создания текущей строки В ВИДЕ файла и строки кода?

#apache-flex #actionscript-3 #compiler-construction #macros

#apache-flex #actionscript-3 #компилятор-построение #макросы

Вопрос:

я хотел бы сделать что-то вроде этого:

 try{
    operationThatMayFail();
}
catch(e:Error){
    handleError();
    MyLogFileLogger.writeEntry("Error ocurred in file "   CURRENT_AS_FILE   " on line: "   CURRENT_LINE);
}
  

конечно, я мог бы это жестко запрограммировать, но если я затем что-то изменю в файле as, номера строк больше не будут правильными, или, возможно, я переименую файл as и так далее. Было бы здорово иметь возможность каким-то образом создать эту строку, используя директивы компилятора.

Возможно ли это в приложении AIR, созданном с помощью ActionScript 3.0?

Ответ №1:

Вам следует посмотреть класс ошибки, попавший в исключение. Вы захотите сделать это:

 try{
    operationThatMayFail();
}
catch(e:Error){
    handleError();
    MyLogFileLogger.writeEntry(e.getStackTrace());
}
  

Комментарии:

1. да, я это знаю, но это работает только в отладочной версии. Я ищу что-то, что работает при установке конечными пользователями, чтобы, если что-то пойдет не так, они могли отправить нам журнал ошибок

2. Невозможно. Вам нужна отладка Flash Player, чтобы иметь возможность считывать метаданные файла и перехватывать эти ошибки. Лучшее, что вы можете (и должны) сделать, это провести модульное тестирование, чтобы попытаться отловить ошибки перед развертыванием, поверх ведения журнала важных событий. Если у вас есть ошибка try catch вокруг функции, и это приводит к сбою, есть большая вероятность, что проблема в функции, и ее следует исследовать дальше с помощью отладчика…

3. очевидно, но если это не удается только на клиентском компьютере, было бы удобно иметь директиву компилятора, которая создает соответствующую строку отладки во время компиляции