Перейти к содержанию
Fire Monkey от А до Я
  • 0

Exception в System


krapotkin

Вопрос

Столкнулся с крайне неприятным моментом. Довольно большая программа на андроиде. Активно используется HTTPClient в потоках. Все работает.

В произвольный момент времени выскакивает Exception 

First chance exception at $408FD44E. Exception class Segmentation fault (11). 

Стек по адресу пустой, моих вызовов не содержит. Если нажать Continue, тут же попадаем в System.pas

First chance exception at $408FD44E. Exception class EAccessViolation with message 'Access violation at address 408FD44E, accessing address 00000000'. 

При работе в отладчике достаточно нажать continue и программа продолжает выполнение как ни в чем не бывало

При автономной работе все зависит от воли случая.
Телефон на DEXP Ixion XL140 MTK 6735 64 bit на Android 5.1 - программа вылетает сразу, ничего не сказав вообще. И этот тел. вообще не встает под отладчик. Ни делфи ни SDK monitor.bat его не видят...
Тел на MT6582 Android 4.4.2 "держит удар" почти не вываливаясь
Alvatel Onetouch 7041D на Android 4.2.2 валится чуть чаще.

Кто сталкивался? что можно сделать??

QIP Shot - Screen 090.png

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Странно что так редко говорят о Segmentation fault, я его ловлю с завидной регулярностью. Правда в моем случае это бывает не в System, а в FMX.Graphics (на 5-ом андройде чаще чем на 4-ом). Причину найти - самое сложное, ведь глюк непостоянен.

 

Изменено пользователем Rusland
Ссылка на комментарий
  • 0

segmentation fault  - это полный аналог Access Violation на Android

чаще всего это собственный косяк и возникает в моем же коде

но тут-то я не вижу куда бежать ((

Ссылка на комментарий
  • 0

пока не могу поймать, там такая движуха нереальная

есть гипотеза, что это может быть следствием самоподписанного сертификата

программа лазит на сервер каждые 10 секунд по HTTPS и в logcat постоянно сыплется ошибка X509 
я обрабатываю HTTPClient,NeedClientCertificate и HTTPClient.ValidateServerCertificate которые я так понимаю вызываются как следствие этой ошибки

но долгое время все ок, а потом бац - и программа слетает

Ссылка на комментарий
  • 0
  • Администраторы

Обычно это ошибки нативного характера. Которые возникают в недрах операционной системы или как результат вызова нативных функций. 

Ссылка на комментарий
  • 0

да
только с меня второй день требуют чтобы я их извел под корень((
обещают всякие нехорошие вещи )
я бы всю программу в try - except завернул ))
пробовал fgxApplication.OnException
туда не приходит (((

 

Ссылка на комментарий
  • 0

Добрый день!

Похожая ситуация была, когда я не уследил за обращениями из не основного потока к экранным компонентам - работает, работает, а потом бац и "Все, они пропали" (с) South park.

Ссылка на комментарий
  • 0

блин, там вызовы HTTPClient и все ((

сегодня выяснил, что на "проблемном" девайсе сразу глохнет если вырубить подключение к сети

программа тут же виснет и видимо срубается системой

при этом на остальных телефонах эта ситуация обрабатывается нормально

Ссылка на комментарий
  • 0
  • Администраторы

Если виснет, то возможно проблема в дедлоке. Работа с сертификатом, на сколько я помню, выполняется с сихнронизацией и может быть причиной этого.

Ссылка на комментарий
  • 0

Может элементарные вещи, но хочу уточнить пару моментов:

0. HTTPclient - это ведь INDY компонент, TidHTTP?

1. Запросы каждые 10 секунд, на время выполнения операции отключается ли таймер?

2. Отлавливаете ли exception в запросах HTTPClient?

3. Включен и работает ли TimeOut в запросе HTTPClient?

4. HTTPclient создается динамически для каждого запроса или статичный компонент?

5. Если сервер возвращает ошибку (правильную ошибку которую вы ожидаете) или же заканчивается TimeOut запроса какие действия? Таймер продолжает работать или остановка процесса?

6. При успешном выполнении операции вызывается Синхронизация или же визуальных действий не происходит?

Изменено пользователем zairkz
Ссылка на комментарий
  • 0

0.нет. теперь в Delphi есть нативные компоненты HTTP чтобы развязаться с инди и его SSL которые теперь под андроид не идут

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

2. да

3  до берлина в HTTPClient не было таймаутов

4. Динамически создается при старте потока

5. все продолжается ибо потоки стартуют независимо

6. синхронизация по факту см. п. 1

 

поставил логирование в файл
при создании класса потока (след -но - в гл. потоке),
при старте Execute (т.е. уже в отдельном потоке) ,
после выхода из HTTP.post (тоже в потоке) и
в OnTerminate (опять - главный)
конкретного места падения нет. падает на любом из этапов.

хотя по смыслу - да, именно косяки с потоками обычно себя так ведут непредсказуемо

Ссылка на комментарий
  • 0

Честно не думаю что чем-то помогу, работаю только с INDY.

Но я не совсем понял ответ №1, не могли бы вы скинуть кусочек кода того что в таймере, создание потока и сам вызов запроса. может что и увижу, как говорится одна голова хорошо, но две лучше.

Изменено пользователем zairkz
Ссылка на комментарий
  • 0

На счет драйверов на телефон посмотрите эти http://4pda.ru/forum/index.php?showtopic=612373&st=1580 (спойлер Инструменты), или ищите китайского прародителя. У меня 2 DEXP для тестов, к обоим, с трудом, но нашел драйвера.

И попробуйте HTTPClient создавать перед каждым обращением в качестве теста. Ну и после запроса к серверу сразу грохать. У меня в одном проекте было подозрение что HTTPClient валится после пары  сотен запросов, то ли утечка памяти, то ли еще что, разбираться не стал, в реальности количество обращений к серверу было гораздо меньше.

 

P.S. Вот этот способ использовал для установки драйверов (они не подписаны) http://4pda.ru/forum/index.php?showtopic=612373&st=1580#entry37324657

Изменено пользователем Евгений Корепов
Ссылка на комментарий
  • 0
2 часа назад, krapotkin сказал:

HTTP создаю каждый раз заново, тут без вариантов

драйвера попробую, спасибо

Может тогда наоборот, попробовать использовать один экземпляр HTTP на весь сеанс работы? Чем черт не шутит, вдруг метод инженерного тыка сработает.

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...