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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> найти баг в программе для вендаус 
V
    Опции темы
boostcoder
Дата 25.8.2010, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



есть программа, написанная преимущественно на boost. использует asio, filesystem, interprocess, thread.
программа прекрасно работает. но при завершении программы, процесс остается висеть еще некоторое время.
при запуске программы из командной строки, при завершении, терминал возвращает управление. ни о какой ошибке ничего не говорит.
при запуске программы из дебагера(qtcreator), при завершении, дебагер висит, ожидает завершения. по прошествию какого-то времени, программа все же завершается с сообщением:
Цитата

dev-v-controll.exe завершился с кодом -1073741819

при попытке пройтись дебагером до точки возврата из main(), определил, что зависание процесса происходит в деструкторе какого-то класса. определить точнее не получается, дебагер виснит.

какие есть в венде для этого инструменты? strace для вендаус не нашел.

зы
mingw-4.5.1, boost-1.43.0, gdb-7.1.

Добавлено через 1 минуту и 43 секунды
зызы
в линукс все гуд.
PM WWW   Вверх
boostcoder
Дата 25.8.2010, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



нашел StraceNT. но в нем программа корректно не запускается.
PM WWW   Вверх
djamshud
Дата 25.8.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

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



Трейс же сисколы перехватывает, толку с него? Нужно дебажить. В качестве развлекушки на полчаса могу присоветовать расставлять контрольные принтф-ы и по ним проследить за тем, кто тормозит.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 25.8.2010, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(djamshud @  25.8.2010,  22:41 Найти цитируемый пост)
толку с него?

по аргументам и кодам возврата очень просто ошибки искать.

Цитата(djamshud @  25.8.2010,  22:41 Найти цитируемый пост)
могу присоветовать расставлять контрольные принтф-ы

уже 4 часа таким делом маюсь. заблудился. это не дело, слишком много деструкторов.
PM WWW   Вверх
Abyx
Дата 25.8.2010, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я бы юзал ollydbg но для нее нужен опыт.

вместо консольных консольных printf надежнее юзать kernel32.OutputDebugString

и ловить их отладчиком, или утилитой DbgView

Это сообщение отредактировал(а) Abyx - 25.8.2010, 23:13
PM MAIL   Вверх
Леопольд
Дата 26.8.2010, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(boostcoder @  25.8.2010,  22:43 Найти цитируемый пост)
уже 4 часа таким делом маюсь. заблудился. это не дело, слишком много деструкторов. 
Может попробовать через перегруженный delete оттрейсить стек?



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
xvr
Дата 26.8.2010, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



В процессе висения (у выхода) нажми Ctrl-C и когда остановится посмотри стек вызовов. Тот, кто висит, будет где то сверху.

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


pattern`щик
****


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

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



Цитата(xvr @ 26.8.2010,  12:21)
В процессе висения (у выхода) нажми Ctrl-C и когда остановится посмотри стек вызовов. Тот, кто висит, будет где то сверху.

я использую QtCreator. комбинацию клавиш вы предложили для него? или для gdb?
PM WWW   Вверх
bsa
Дата 29.8.2010, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



boostcoder, запусти под отладчиком, когда "зависнет", нажми на "паузу". А дальше по стеку вызовов определи где повисло.
PM   Вверх
xvr
Дата 30.8.2010, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(boostcoder @  29.8.2010,  17:55 Найти цитируемый пост)
я использую QtCreator. комбинацию клавиш вы предложили для него? или для gdb?
Для всех. Должно выйти в дебагер (для практически любого дебагера) 
PS. Еще можно попробовать Ctrl-Break 
(или соотвествующую кнопку в GUI, если он есть)

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


pattern`щик
****


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

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



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

Добавлено через 5 минут и 10 секунд
попробую собрать с помощью msvc. говорят там дебаггер поудобнее.
PM WWW   Вверх
Abyx
Дата 30.8.2010, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



boostcoder, попробуйте таки использовать OllyDbg 1.10.
Когда прога повиснет, нажмите паузу [||], затем [K] чтобы показать окно стека вызовов.
Если там будет пусто, смотрите адреса возврата в стеке (справа внизу).
Если есть .pbd файл, то под окном дизасма будут строки кода.
Если .pdb файл не сделать, сделайте наиболее интересные функции экспортируемыми __attribute__((dllexport))
user posted image
Вобщем-то можно обойтись и без знания асма.
PM MAIL   Вверх
boostcoder
Дата 30.8.2010, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Abyx, сейчас попробую..
PM WWW   Вверх
boostcoder
Дата 30.8.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



при завершении, вот что вижу:
user posted image
в статусбаре текст!

жму пайзу, К, и вижу это:
user posted image

но мне это ни о чем не говорит. увы.

Добавлено через 54 секунды
ы)
почему-то скрины не масштабируются форумом.
PM WWW   Вверх
Abyx
Дата 30.8.2010, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да.. что-то сказать по скринам сложно smile

на 1м скрине видно что программа падает с AccessViolation при попытке чтения адреса 0x14
в стеке вызовов видно что это внутри функции с адресом 1090В30

можно попробовать ее найти. например сгенерив .map файл и поискав там последние 3-4 цифры адреса
или загрузить бинарник в IDA, там скорей всего будут корректно отображаться симовлы
еще можно поискать по сигнатуре, в окне дизасма показаны байты кода

Добавлено через 12 минут и 30 секунд
вообще это выглядит как попытка удалить класс по нулевому указателю
Код

auto_ptr<Foo> a(new Foo());
int main()
{
    a::release();
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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