Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GDB и стек вызовов 
:(
    Опции темы
Perovskit
Дата 7.10.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 30.7.2008

Репутация: нет
Всего: нет



Где-то в многопоточной программе возникает взаимоблокировка мьютексов. Останавливаю через SIGINT в GDB. Выбираю поток в котором, скорее всего, и есть ошибка, далее:
Код

(gdb) where
#0  0x282a27f3 in _umtx_op () from /lib/libc.so.7
#1  0x28135ead in __error () from /lib/libthr.so.3
#2  0x082054c0 in ?? ()
#3  0x00000005 in ?? ()
#4  0x00000000 in ?? ()
#5  0x00000000 in ?? ()
#6  0x00000000 in ?? ()
#7  0x281379ac in ?? () from /lib/libthr.so.3
#8  0xbfbfe7a8 in ?? ()
#9  0x281318b6 in pthread_mutex_getprioceiling () from /lib/libthr.so.3
Previous frame identical to this frame (corrupt stack?)


Причем это в двух потоках (вероятно, блокирующих друг друга), но здесь непонятно, в какой функции или какой мьютекс работают некорректно. Можно ли в GDB в реальном времени смотреть за вызовами функций определенного потока? Пошаговое выполнение не устраивает, так не знаю, как воспроизвести ошибку -- она где-то раз в полчаса происходит. Очень не хочется перед каждым захватом мьютекса делать cout << "Locking in f()" << endl;
PM MAIL   Вверх
MAKCim
Дата 7.10.2008, 11:33 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Perovskit @  7.10.2008,  11:16 Найти цитируемый пост)
Очень не хочется перед каждым захватом мьютекса делать cout << "Locking in f()" << endl; 

а зря
нет, серьезно, логгирование в многопоточных программах - лучшее решение
при грамотном логгировании проблема всплывает сама собой


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Perovskit
Дата 8.10.2008, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 30.7.2008

Репутация: нет
Всего: нет



Спасибо. 

Проблему решил. Проблема чисто в недостатке опыта работы с многопоточными приложениями. По ходу возник вопрос -- не попадались ли кому-нибудь статьи по проектированию на С++ многопоточных приложений? Интересуют именно советы для общих ситуаций.
PM MAIL   Вверх
MAKCim
Дата 8.10.2008, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Perovskit
могу посоветовать стараться не использовать глобальные переменные (даже с синхронизацией)



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0645 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.