Как получить текст отслеживания стека исключительной ситуации в Java ME?

Ошибка, которую вы получаете, когда попытка загрузки происходит из-за того, что вызов urllib является совершенно новым сеансом для их сервера - у него нет файлов cookie и аутентификации, которые использует ваш браузер. Например. это то же самое, что если вы откроете режим инкогнито в браузере и вставите в адресную строку атрибут src - для сервера вы новый клиент, который не заполнил форму, вошел в систему и т. д.

Возможно, вы захотите попробовать что-то еще - в сеансе селен / браузер, сделав снимок экрана только с элементом <img>. Эта операция с переменным успехом, например, Chrome добавил ее поддержку только недавно, а в некоторых ситуациях она терпит неудачу:

found = browser.find_element_by_css_selector('img[alt="labelImage"]')
try:
    found.screenshot('element.png')
except Exception as ex:  # FIXME: anti-pattern - I don't recall the exact exception - when you run the code, change it to the proper one
    print('The correct exception is {}'.format(ex))
    browser.get_screenshot_as_file('page.png')

Если не удается сделать снимок экрана элемента, вы получите одну страницу целиком - который вы можете затем обрезать до элемента.

8
задан Lucifer 21 March 2014 в 03:02
поделиться

5 ответов

AFAIK там не является никаким способом получить отслеживание стека как строковое значение, если определенная платформа не обеспечивает средство переопределить поток System.err по умолчанию. На платформе BlackBerry это выводит отслеживание стека на catch(Exception) для сохранения памяти однако она не делает этого на catch(Throwable) и предоставляет доступ к отслеживанию стека через журнал событий устройства.

То, что я закончил тем, что делал, ловит Throwable, а не Exception в прошлый момент и печатает отслеживание стека оттуда. Это, конечно, имеет опасность, что Вы также ловите java.lang.Error который не очень хорош, особенно если OutOfMemoryError, хотя вызов к System.gc() прежде, чем распечатать отслеживание стека, кажется, снижает риск, и у нас не было проблем с ним.

Я посмотрел бы на любую платформу, для которой Вы нацелены и видите, предоставляют ли они доступ к System.err где-нибудь. Можно всегда поднимать трубку отладчик, и это должно появиться на консольном выводе, хотя это кажется, что Вы после получаете отслеживания стека 'в поле'.

2
ответ дан 6 December 2019 в 00:59
поделиться

два решения:

  • воспроизведите исключение на эмуляторе. беспроводной инструментарий и Netbeans распечатают отслеживания стека на Вашем компьютере.

  • используйте устройство Symbian.

До Пакета функций 2 из Серий 60 3-й выпуск гарнитуры Symbian используют Горячую точку Sun виртуальная машина Java. Это было адаптировано к Symbian ОС путем соединения его с частичной реализацией стандартной библиотеки C.

Это позволило Symbian создавать программу C++, названную редиректором, который был способен к получению стандартного вывода VM и стандартной погрешности, включая отслеживания стека исключительной ситуации Java.

редиректор C++ никогда не обновлялся для версии 9 Symbian ОС. Вместо этого "redirect://" протокол GCF был введен в VM,

От отдельного MIDlet откройте InputStream от соединения, возвращенного Connector.open ("redirect://", Коннектор. ЧИТАЙТЕ); можно затем получить отслеживания стека исключительной ситуации по телефонам Symbian.

РЕДАКТИРОВАНИЕ: "redirect://" вернулся в 5-м выпуске Series60 и "redirect://, тест" должен работать над 3-м пакетом функций выпуска Series60 2

3
ответ дан 6 December 2019 в 00:59
поделиться

Вы можете сделать, чтобы PrintWriter записал в ByteArrayOutputStream и восстановил Строку от байтов.

try{
    throw new Exception("Message");     
} catch (Exception ex){
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ex.printStackTrace(new PrintStream(out));
    System.out.println(new String(out.toByteArray()));
}

Это не симпатично, но это должно работать в значительной степени везде. Перед попыткой вышеупомянутого удостоверьтесь, что у Вас нет доступа к [Throwable#getStackTrace] (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html#getStackTrace ()), требования Eclipse, это доступно в CDC/основе 1.1, но это ничего не говорит о других профилях.

-2
ответ дан 6 December 2019 в 00:59
поделиться

Я не делаю вещи, там способ сделать это в CLDC 1.0. Однако на некоторых устройствах/Ose базовый Класс исключений мог позволять для доступа к отслеживанию стека (думайте более новые версии CLDC). Просто осмотрите экземпляр исключения во времени выполнения с помощью отражения для наблюдения, каких участников это выставляет на целевых платформах. Вы могли затем написать некоторый код, который сможет безопасно извлечь отслеживание стека на платформах, которые предлагают такую информацию.

0
ответ дан 6 December 2019 в 00:59
поделиться

Я создал инструмент, который можно использовать для регистрации правильных трасс стека также в CLDC. Посмотрите его на http://jarrut.sourceforge.net. Он еще очень новый и может иметь некоторые неровности, но он работает для меня, и я уже не могу представить себе разработку MIDlets без него. Лучший способ использовать его - это объединить его с microlog.

К сожалению, инструмент в настоящее время требует CLDC 1.1, поэтому он может не решить проблему для автора сообщения.

0
ответ дан 6 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: