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

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

il
Offline Offline

« : 02-12-2008 14:36 » 

Не могу определиться с подходом.
Имею действительно большую программу - десяток dll, сотня файлов.

1. В дебаге работает, в релизе падает.
2. При старте в одних и тех же условиях с одинаковыми данными программа падает на разных операторах в пределах одной функции.
3. Падение происходит внутри вложенных циклов каждый раз при разных, но близких значениях индексов. Падение начинается после нескольких тысяч исполнений тела внутреннего цикла.

Помогите, пожалуйста, с выбором тактики и инструментов поиска ошибок в подобных условиях.

Спасибо.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 02-12-2008 18:13 » 

где то неинициализированны переменные - самое обычное в таких случаях. Но, может и ещё что то

((мммм, я бы переписал исходники, или написал программу-аналог, чем копаться в чужих глюках...))
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 02-12-2008 19:54 » 

как-то встречал, что оптимизатор являлся причиной глючности программы. Цикл шел вверх от нуля, а оптимизатор сделал его снисходяшим к нулю. Для меня это было критичным. Второе может быть. Не корректная работа с диапазонами массивов. В Дебаг режиме делаются буферы безопасности, поэтому это не критично для соседних данных. В Релиз режиме, таких буферов нет, следовательно могут портится соседние данные. Выход прогрнать свою прогу, через проги по поиску утечек памяти, как правило такие ошибки они тоже ловят. И как сказал Леша, переменные нужно обязательно иницилизировать.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
ezus
Опытный

il
Offline Offline

« Ответ #3 : 03-12-2008 08:42 » 

Спасибо,
но к сожалению:
1. "где то неинициализированны переменные" - КАК их найти?
2. "Но, может и ещё что то" - ЧТО, а главное ГДЕ?
3. "переписал исходники, или написал программу-аналог" - у меня, к сожаление, нет двадцати лет, уже потраченных на разработку.
4. Оптимизатор - это идея, котору надо проверить
5. "работа с диапазонами массивов" - с какими и ГДЕ?

Я задаю эти вопросы, потому что работа с исходниками затруднена по причине размеров - порядка 50 мегабайт (*.cpp, *.h). Их физически не пересмотришь. Поэтому похоже надежда только на отладку.

Тогда вопрос - как провести такую отладку?

6. "Выход прогрнать свою прогу, через проги по поиску утечек памяти" - фирма в данное время врядли купит что-нибуть серьезно. Может подскажите что-нибуть из free?




Записан
Вад
Модератор

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

« Ответ #4 : 03-12-2008 08:56 » 

ezus, но, насколько я понимаю, примерно понятно, при совершении каких действий происходит ошибка? Если так, то по опыту локализации дефектов на продукте подобного масштаба на мобильных устройствах могу предложить отладочный вывод с последующим анализом последних мгновений работы. Хотя если проблема где-то в синхронизации, то она при этом может спрятаться.
Записан
ezus
Опытный

il
Offline Offline

« Ответ #5 : 03-12-2008 09:12 » 

Спасибо
Записан
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #6 : 03-12-2008 09:35 » 

посмотри в пакете Sysinternals Suite (кажется так) - может там что-то найдешь. У них же куча всего была сделана.

Еще - зашла в гугл и задала строку:

memory leak  tool seach OR поиск OR искать

там сразу же выскочила страница с каким-то бесплатным тулом, но мне он незнаком, а разбираться с этим у меня времени сейчас, к сожалению,  нет.
 
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
ezus
Опытный

il
Offline Offline

« Ответ #7 : 03-12-2008 09:55 » 

Спасибо - поищу
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #8 : 03-12-2008 10:50 » 

Лично я согласен с Алексей1153++
бага скорее всего где-то рядом с циклом и проблема в не инициализированной переменной, например, строка оказалась не null terminated

можно собрать дебажную версию с встроенной проверкой выбегания за приделы буфера, затиранимем соседних переменных и т.д.
думаю тебе интересней всего будет установка параметров CrtSetDbgFlag
начни с этой функции и дальше рой в документации, там много всего
Записан

Странно всё это....
Джон
просто
Администратор

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

« Ответ #9 : 03-12-2008 10:54 » 

ezus, на будущее - в БОЛЬШИХ программах ВСЕГДА трудно разбираться, отсюда вывод - надо разбивать БОЛЬШУЮ программу на маленькие модули и отлаживать каждый модуль в отдельности. В противном случае поиск ошибок может занять больше времени чем создание самой программы. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 03-12-2008 10:58 » 

ezus, а если не секрет, как такая ситуация сложилась ?
Записан

ezus
Опытный

il
Offline Offline

« Ответ #11 : 03-12-2008 11:12 » 

LogRus: Списибо за CrtSetDbgFlag. Красивый подход. О чем-то подобном я и спрашивал. Сейчас займусь.

Джон: Все правильно, но система старая, и в начале разрабатывалась не программистами-профессионалами, а программистами-пользователями. Там есть большие фрагменты кода, написанные еще для C/DOS.

Алексей1153++: Вы о чем?
А. Если о системе, то я уже описал ситуацию.
Б. Если о баге, то трудно определить момент его появления, т.к. какая-то грязь была и раньше, но фатальной она стала после ряда изменений, сделанных разными людьми в разных местах. И сейчас не известно, или это что-то новенькое, или последствия ошибки сместились с безобидного места на критическое (например запись по мусорному указателю).
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 03-12-2008 11:53 » 

ezus, я о том, что ты взял поддеорживать чью то программу, которая в дебаге работает, но в релизе падает - а тот разработчик её в релизе не запускал что ли никогда ?
Записан

ezus
Опытный

il
Offline Offline

« Ответ #13 : 03-12-2008 12:00 » 

Запускал. Изредка программа падала. Но это не очень мешало работе, т.к. программа в основном вычислительная - ну, запущу еще раз - не страшно.
А сейчас она стала падать в новом модуле. Я его весь перешерстил, но грязи не вижу.
И сейчас не знаю на что грешить, или на старые ошибки, или это вновь привнесенное.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 03-12-2008 12:16 » 

я бы при первом же падении напрягся ) Потом проблем меньше
Записан

ezus
Опытный

il
Offline Offline

« Ответ #15 : 03-12-2008 14:03 » 

К сожалению паровоз уже уплыл.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines