Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отловить ошибку по сообщению о вылете программеы  (Прочитано 6603 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Boriska
Помогающий

us
Offline Offline

« : 25-01-2014 09:49 » 

Привет.

Коллеги подскажите, пожалуйста.
Программа работает день два неделю, потом возникает ошибка и программа вылетает.
Как отловить ошибку такого рода. MFC C++
« Последнее редактирование: 25-01-2014 11:22 от lkote » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 25-01-2014 15:17 » 

lkote, расход памяти и других ресурсов проверяли? Утечки - первое, что стоит проверить. Если всё-таки редкая ошибка в логике - тщательнее тестировать код или ловить данные, на которых падает (и которые предшествуют падению), пытаться воспроизвести сценарий. Логи могут помочь. Перехват исключений - возможно, где-то просто генерируется исключение.
Записан
Boriska
Помогающий

us
Offline Offline

« Ответ #2 : 25-01-2014 16:32 » 

Один мой знакомый говорил что можно найти место где произошла ошибка по адресу который бывает в окне
репорта о вылете. Скажите пожалйста Вы ничего не знаете о этом способе.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 25-01-2014 17:23 » 

Debug-сборка показывает не адрес сбоя, а нарушенный ASSERT - это чуть более информативно.

Что касается программ, работающих неделю... Если такие программы используют много памяти, и память эта занята многими мелкими и многими крупными объектами, небольшая часть которых постоянно создаётся и уничтожается, теоретически может быть падение Out of memory из-за фрагментации.

Плавающие баги также часто связаны с синхронизацией потоков.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
zubr
Гость
« Ответ #4 : 25-01-2014 17:36 » new

Один мой знакомый говорил что можно найти место где произошла ошибка по адресу который бывает в окне
репорта о вылете. Скажите пожалйста Вы ничего не знаете о этом способе.
Это обычно редко помогает. Окно сообщения об ошибке показывает адрес памяти где произошла ошибка, а это зачастую адрес динамической памяти где хранится указатель на несуществующую область памяти. Но попробовать можно, иногда помогает. Просто открываешь программу в отладчике-дизассемблере и ищешь инструкцию по адресу ошибки.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines