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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чем искать ошибку блокировки мьютекса? 
V
    Опции темы
boostcoder
Дата 14.11.2010, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



всем привет.
есть код написанный на С++, преимущественно с использованием boost.
код многопоточный.
в некоторый момент ловлю исключение:
Цитата

Throw in function (unknown)
Dynamic exception type: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >
std::exception::what: boost::lock_error

по последней строке, могу судить о том, что что-то с блокировкой мьютексов. а их в коде не мало.

собственно вопрос: как понять где/откуда бросается исключение? какие тулзы/инструменты использовать?
работаю в QtCreator. так и не понял как в нем можно просмотреть стек вызовов.

спасибо.

PM WWW   Вверх
bsa
Дата 14.11.2010, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(boostcoder @  14.11.2010,  16:58 Найти цитируемый пост)
как понять где/откуда бросается исключение?

Поставь точку останова на throw (делается когда программа уже запущена)

Цитата(boostcoder @  14.11.2010,  16:58 Найти цитируемый пост)
так и не понял как в нем можно просмотреть стек вызовов.

В режиме отладки внизу на левой половине окна.
PM   Вверх
boostcoder
Дата 14.11.2010, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(bsa @  14.11.2010,  19:23 Найти цитируемый пост)
Поставь точку останова на throw

в том то и дело, что после этого throw, программа просто завершается. сама smile 

Цитата(bsa @  14.11.2010,  19:23 Найти цитируемый пост)
В режиме отладки внизу на левой половине окна.

в режиме отладки стек-то есть. а вот как бы его увидеть когда программа уже упала?..
PM WWW   Вверх
bsa
Дата 15.11.2010, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



boostcoder, а ты случаем не в режиме release собрал прогу? В режиме отладки программа в случае ошибки останавливается и ждет от тебя действий.
PM   Вверх
boostcoder
Дата 15.11.2010, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(bsa @  15.11.2010,  00:01 Найти цитируемый пост)
ты случаем не в режиме release собрал прогу?

нет smile 

Цитата(bsa @  15.11.2010,  00:01 Найти цитируемый пост)
В режиме отладки программа в случае ошибки останавливается и ждет от тебя действий.

ну не знаю... в моем случае она просто завершается.
PM WWW   Вверх
bsa
Дата 15.11.2010, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



boostcoder, я тебе говорю, или ты не под отладчиком запустил, или у тебя программа в релизе.

Добавлено через 1 минуту и 24 секунды
Цитата(boostcoder @  15.11.2010,  01:17 Найти цитируемый пост)
ну не знаю... в моем случае она просто завершается. 

А, я забыл, что у тебя не сегфолт, а исключение... Тогда действительно будет нормально завершаться, если точки останова не понаделал. В т.ч. и на throw.
Попробуй еще "синхронизировать" точки останова.
PM   Вверх
boostcoder
Дата 15.11.2010, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(bsa @  15.11.2010,  00:42 Найти цитируемый пост)
"синхронизировать" точки останова.

это что? как?

PM WWW   Вверх
MAKCim
Дата 15.11.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



boostcoder, 
обычно правильное логирование решает все проблемы ;)

Добавлено через 7 минут и 51 секунду
еще можно через set_terminate поставить свой обработчик и на него уже бряк
Код

#include <iostream>
#include <exception>

static void my_terminate()
{
    std::cout<<"my_terminate()"<<std::endl;
}

int main()
{
    std::set_terminate(my_terminate);
    throw 1;
    return 0;
}

Код

# gdb -q
(gdb) file test
Reading symbols from /home/rei3er/test...done.
(gdb) break my_terminate
Breakpoint 1 at 0x80487ca: file test.cpp, line 6.
(gdb) run
Starting program: /home/rei3er/test
Breakpoint 1, my_terminate () at test.cpp:6
6        std::cout<<"my_terminate()"<<std::endl;
(gdb) bt
#0  my_terminate () at test.cpp:6
#1  0xb76eb055 in ?? () from /usr/lib/libstdc++.so.6
#2  0xb76eb092 in std::terminate () from /usr/lib/libstdc++.so.6
#3  0xb76eb1ca in __cxa_throw () from /usr/lib/libstdc++.so.6
#4  0x08048897 in main () at test.cpp:12



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

PM MAIL   Вверх
boostcoder
Дата 20.11.2010, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



как-то недопёр smile 
спасибо. помогло.

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

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

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


 




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


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

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