Russian Qt Forum
Май 29, 2024, 13:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: DeadLock - как ловить в gdb?  (Прочитано 2289 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Декабрь 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;
 
Но, увы, не всегда  Плачущий
Вопросы типа "а какой компилятор, версия, платформа?" - прошу не задавать.  Если б оно штатными средствами решалось - не поленился бы выучить. Прошу поделиться опытом отлова.

Спасибо
Записан
brankovic
Гость
« Ответ #1 : Декабрь 22, 2010, 22:21 »

Что значит не всегда? То есть проскакивает "Alert"?

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

Ну то есть я что хочу сказать, на линуксе опыт отлова такой: ждём дедлока, аттачимся gdb, всё работает.
« Последнее редактирование: Декабрь 22, 2010, 22:26 от brankovic » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.066 секунд. Запросов: 19.