Информация об изменениях

Сообщение Re: Определение стека потока, который стоит на мьютексе от 03.12.2021 9:18

Изменено 03.12.2021 9:22 lpd

Re: Определение стека потока, который стоит на мьютексе
Здравствуйте, Рома Мик, Вы писали:


РМ>Но если основной поток "повис" на мьютексе, то стектрейс состоит из всего двух записей:

РМ>
РМ>000: 0x9c1ac /apex/com.android.runtime/lib/bionic/libc.so __epoll_pwait
РМ>001: 0x6df9c /apex/com.android.runtime/lib/bionic/libc.so epoll_wait
РМ>


Похоже не на мьютекс, а на epoll сокетов, очевидно.

РМ>Можно ли как-то узнать стек самого блокирующего вызова?


Возможно, какая-то из библиотек или программа собраны без отладочной информации, или без stack-frame pointers.

Вообще, такое печать стеков может systemtap. Это печатать стеков при всех вызовах функции, но если небольшым скриптом можно учесть изменение переменной по таймауту.
Re: Определение стека потока, который стоит на мьютексе
Здравствуйте, Рома Мик, Вы писали:


РМ>Но если основной поток "повис" на мьютексе, то стектрейс состоит из всего двух записей:

РМ>
РМ>000: 0x9c1ac /apex/com.android.runtime/lib/bionic/libc.so __epoll_pwait
РМ>001: 0x6df9c /apex/com.android.runtime/lib/bionic/libc.so epoll_wait
РМ>


Похоже не на мьютекс, а на epoll сокетов, очевидно.

РМ>Можно ли как-то узнать стек самого блокирующего вызова?


Возможно, какая-то из библиотек или программа собраны без отладочной информации, или без stack-frame pointers.

Вообще, печать стеков может systemtap. Это печатать стеков при всех вызовах функции, но небольшым скриптом можно учесть изменение переменной по таймауту.