Russian Qt Forum

Программирование => Общий => Тема начата: Igors от Декабрь 22, 2010, 22:15



Название: DeadLock - как ловить в gdb?
Отправлено: Igors от Декабрь 22, 2010, 22:15
Добрый вечер

Проблема в том что если deadlock все ж случился - gdb ничего не покажет. Можно сказать отладчику "stop" - но не видно никакого стека вызовов (одни ??). Часто помогает так (псевдокод)

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

Спасибо


Название: Re: DeadLock - как ловить в gdb?
Отправлено: brankovic от Декабрь 22, 2010, 22:21
Что значит не всегда? То есть проскакивает "Alert"?

А какая платформа? :) Просто по моему опыту на линуксе "в стеке одни вопросики" только если нет отладочной информации, стек испорчен или останов в хэндлере сигнала.

Ну то есть я что хочу сказать, на линуксе опыт отлова такой: ждём дедлока, аттачимся gdb, всё работает.