Глобальная обработка ошибок теперь поддерживается во Flash 10 и AIR2. Подробнее об этом здесь: http://help.adobe.com/en_US/air/reference/html/flash/events/UncaughtErrorEvent.html
Использование такого рода функциональности для отлова необработанных исключений; Вы можете отправить трассировку в какой-либо веб-сервис, настроенный специально для их получения. Использование Google App Engine отлично подходит для этой цели, поскольку в нем уже есть функция ведения журнала, которая получает все виды метаданных от клиента, вызывающего приложение. Кроме того, если ваши журналы по какой-то причине становятся большими - по крайней мере, вам не придется беспокоиться о их хранении. Google сделает это за вас:
Я настроил такую службу, как описано ниже (при условии, что у нее есть некоторые недостатки, в частности, любой может вызвать ее и добавить «следы», но вы можете добавить несколько общих секретов и публиковать сообщения через HTTPS, чтобы иметь крошечную меру безопасности).
Служба регистрации App Engine
#!/usr/bin/env python
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
class MainHandler(webapp.RequestHandler):
def post(self):
import logging
if self.request.get('trace'):
logging.error(self.request.get('trace')) #Adds a row to GAE:s own logs :)
self.response.out.write('trace logged')
else:
set_status(501)
def get(self):
""" Kill this function when done testing """
test_form = """
<form action="/" method="POST">
<textarea name="trace"></textarea>
<input type="submit">
</form>"""
self.response.out.write(test_form)
def main():
application = webapp.WSGIApplication([('/', MainHandler)],
debug=False)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
Я написал небольшое AIR-приложение, содержащее эту маленькую тестовую функцию, которая просто POST: редактировала службу движка приложения с указанным параметром «trace».
Отправка в службу ведения журнала (ActionScript)
private function postToLogger(event:MouseEvent):void
{
var service:HTTPService = new HTTPService();
var parameters:Object = {'trace': "omg something went wrong"};
service.url = "https://YOURSUPERSIMPLELOGGINGSERVICE.APPSPOT.COM";
service.method = HTTPRequestMessage.POST_METHOD;
service.resultFormat = HTTPService.RESULT_FORMAT_E4X;
service.addEventListener("result", onSuccess);
service.addEventListener("fault", onError);
service.send(parameters);
}
И наконец, вот как это выглядит в журналах, много метаданных и след, который вы обнаружили в приложении AIR.