Добрый вечер
Проблема в том что если deadlock все ж случился - gdb ничего не покажет. Можно сказать отладчику "stop" - но не видно никакого стека вызовов (одни ??). Часто помогает так (псевдокод)
C++ (Qt)
int threadNo = GetCurThread();
if (theLockOwner == threadNo)
 Alert("deadlock");  // поймали
 
// захватываем
DO_LOCK;
theLockOwner = threadNo;
...
// работаем
...
// освобождаем
theLockOwner = -1;
DO_UNLOCK;
 
Но, увы, не всегда  

Вопросы типа "а какой компилятор, версия, платформа?" - прошу не задавать.  Если б оно штатными средствами решалось - не поленился бы выучить. Прошу поделиться опытом отлова.
Спасибо