Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,301
#1

Определить взаимную блокировку (диагностика) - Программирование Android

22.09.2016, 15:41. Просмотров 226. Ответов 6
Метки нет (Все метки)

как правильно определить причину взаимной блокировки в большом приложении, в большом проекте? Как правильно собрать дамп потоков и его проанализировать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2016, 15:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить взаимную блокировку (диагностика) (Программирование Android):

Отловить блокировку экрана - Программирование Android
Добрый день! Хотелось бы отловить блокировку экрана и, например, запустить активность. Т.е когда устройство разблокируется, первым что...

Программно включить экран не отключая блокировку - Программирование Android
Добрый вечер! Появилась нужда во включении экрана (включении подсветки) не выходя из режима блокировки(Keyguard). К примеру, чтобы через...

Отключить блокировку экрана при бездействии - Программирование Android
Как можно отключить блокировку экрана, если приложение активно, но пользователь долгое время не совершал никаких действий?

Получить взаимную корреляционную функцию сигналов - MathCAD
очень нужна помощь, рассчитал плотности распределения вероятностей двух сигналов: первый нормальный(гауссов) стационарный процесс, второй...

Вычислить взаимную индуктивность двух коаксиальных колец - Электричество и магнетизм
Вычислить взаимную индуктивность М двух коаксиальных колец радиусами R1 и R2, находящихся на расстоянии l друг от друга, полагая, что l...

Напишите функцию, аналогичную встроенной функции замены subst в спи-ске s взаимную замену x на y - Lisp
Напишите функцию, аналогичную встроенной функции замены subst в списке s выражения x на y, но производящую взаимную замену x на y, т.е....

6
KEKCoGEN
Эксперт Java
1934 / 1812 / 437
Регистрация: 28.12.2010
Сообщений: 7,269
22.09.2016, 15:48 #2
yura91, kill -3 <pid> дает дамп потоков. Опций для просмотра и анализа дампов миллион. Можно в блокноте смотреть, а можно скачать всякие программы утилиты
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,301
22.09.2016, 15:57  [ТС] #3
А как по самому дампу понять где была взаимная блокировка? Это место как то помечается в дампе можно пример дампа какого нибудь с блокировкой? И как там это место обозначается?
0
turbanoff
Модератор
Эксперт Java
3958 / 3693 / 457
Регистрация: 18.05.2010
Сообщений: 9,276
Записей в блоге: 11
Завершенные тесты: 1
22.09.2016, 15:58 #4
Чтобы получить дамп потоков есть утиллита jstack (входит в поставку JDK).
Код
jstack -m <pid>
Если процесс JVM завис совсем
Код
jstack -F -m <pid>
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,301
22.09.2016, 16:25  [ТС] #5
Ну дамп потоков я получу а дальше как по этому дампу понять причину deadlock как она обозначается в самом дампе? Ну по этому дампу можно понять в каком месте ошибка?

Добавлено через 1 минуту
есть какой то инструмент работы с самими дампами? или как их расшифровывать?
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,301
22.09.2016, 16:47  [ТС] #6
Да там же как то при помощи DDMS Android Studio можно проще определить да? И еще не подскажите как правильно разобрать сам дамп потоков? Там есть id потока и прочее. Можете подробнее объяснить это все если можно?

Добавлено через 7 минут
Например если такой дамп получился
Код
"Thread-23" daemon prio=5 tid=22 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x4056fbc0 self=0x1b5da0
  | sysTid=764 nice=0 sched=0/0 cgrp=bg_non_interactive handle=1793248
  at android.os.MessageQueue.nativePollOnce(Native Method)
  at android.os.MessageQueue.next(MessageQueue.java:119)
  at android.os.Looper.loop(Looper.java:117)
  at com.que.gpslogger.module.b.a.run((null):-1)
 
"Thread-22" prio=5 tid=21 TIMED_WAIT
  | group="main" sCount=1 dsCount=0 obj=0x40573d58 self=0x1b6768
  | sysTid=765 nice=0 sched=0/0 cgrp=bg_non_interactive handle=1796256
  at java.lang.Object.wait(Native Method)
  - waiting on <0x40573cf0> (a com.que.gpslogger.d.q)
  at java.lang.Object.wait(Object.java:395)
  at com.que.gpslogger.a.run((null):-1)
  at java.lang.Thread.run(Thread.java:1019)
 
"Thread-21" prio=5 tid=20 TIMED_WAIT
  | group="main" sCount=1 dsCount=0 obj=0x4056e678 self=0x1b4b18
  | sysTid=763 nice=0 sched=0/0 cgrp=bg_non_interactive handle=1789008
  at java.lang.Object.wait(Native Method)
  - waiting on <0x4056e5c0> (a com.que.gpslogger.d.n)
  at java.lang.Object.wait(Object.java:395)
  at com.que.gpslogger.a.run((null):-1)
  at java.lang.Thread.run(Thread.java:1019)
 
"Thread-19" prio=5 tid=18 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x4056d860 self=0x1b3f70
  | sysTid=761 nice=0 sched=0/0 cgrp=bg_non_interactive handle=1786024
  at java.lang.Object.wait(Native Method)
  - waiting on <0x40573458> (a java.lang.VMThread)
  at java.lang.Object.wait(Object.java:358)
  at java.lang.Thread.join(Thread.java:914)
  at com.que.gpslogger.d.k.c((null):-1)
  at com.que.gpslogger.a.run((null):-1)
  at java.lang.Thread.run(Thread.java:1019)
Как его разобрать где здесь deadlock?
0
turbanoff
Модератор
Эксперт Java
3958 / 3693 / 457
Регистрация: 18.05.2010
Сообщений: 9,276
Записей в блоге: 11
Завершенные тесты: 1
22.09.2016, 21:56 #7
Ну, для начала стоит понять, почему вы решили, что у вас deadlock?
Обычно, это значит, что какой-то интересующий вас поток висит и ждёт захвата лока. Какой из этих потоков вам интересен?

PS. Наименование потоков Thread-<num> - это говнокод. Всегда давайте потокам значимые имена.

Добавлено через 2 минуты
В общем предвосхищая будущие вопросы: никакого true-way для разбора deadlock-ов нет. Вы просто смотрите на stack trace интересующих вас потоков, и пытаетесь понять, почему они заблокировались. Очень часто - это супер-нетривиальная задача.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2016, 21:56
Привет! Вот еще темы с ответами:

Во всех файлах, расположенных в заданном поддереве, произвести взаимную замену двух заданных символов - Linux
Во всех файлах, расположенных в заданном поддереве, произвести взаимную замену двух заданных символов. Полученные файлы переименовать,...

Как обойти блокировку? - Сети
В воскресение у нас в Актобе заблокировали во всей области выход в интернет. Так как я моя работа напрямую связана с сетью то понятное дело...

Снять блокировку с сотового - Смартфоны
Приветствую Всех!!!! У моего брата есть сотовый Nokia - монохромный... Он с ним что-то сделал и теперь с него нельзя звонить только...

fly снять блокировку - Смартфоны
Проблема такая , девочка не правильно ввела , а точнее пальцем сняла блокировку и тел. заблокировался , как можно снять блокировку ?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
22.09.2016, 21:56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru