Отладка блокировки фьютекса

У меня есть процесс, ожидающий фьютекса:

# strace -p 5538
Process 5538 attached - interrupt to quit
futex(0x7f86c9ed6a0c, FUTEX_WAIT, 20, NULL

Как мне лучше отладить такую ​​ситуацию? Могу ли я определить, кто владеет фьютексом? Существуют ли какие-либо инструменты, похожие на ipcs и ipcrm, но для фьютексов?


person user300811    schedule 20.06.2013    source источник


Ответы (2)


Попробуйте использовать gdb -p *PID*, а затем запустите where или bt, чтобы увидеть обратную трассировку.

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

person Josip Rodin    schedule 02.05.2015

У меня такая же проблема с частью кода C++. Убунту 12.10 64бит. Похоже, что аналогичная проблема была в 2007 году, когда libc глючила (а может быть, и сейчас?).

Я запускаю поток, который запускает трассировку в системном вызове. Printf до и после системы указывают, что операционная система зависает на системном вызове, БЕЗ выполнения трассировки.

Я не уверен, что мой Linux снова сломался из-за обновления Ubuntu или это ошибка, связанная с libc. Поскольку многие приложения имеют «похожие» проблемы, я предполагаю, что они застряли где-то в пользовательском пространстве.

Мой код на С++ отлично работает на 32-битных системах и даже на 64-битных OSX, поэтому я предполагаю, что комбинация ubuntu 12.10 + 64-битная libc не работает.

person newgen    schedule 15.07.2013