Программа, разрабат. на VB6, “заглючила”. Как устранинить?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
patq
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 06.08.2005 (Сб) 22:23
Откуда: Ижевск

Программа, разрабат. на VB6, “заглючила”. Как устранинить?

Сообщение patq » 11.10.2006 (Ср) 4:42

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

Программа на выходе и тут, работая с программой, заметил, что она стала неадекватно себя вести.
Откорректируешь что-то, запустишь программу без точек остановок, выдает не то кол-во замечаний. Ничего не меняя, пройдешь программу с точками останова – и все нормализуется: начинает работать как задумано (и без точек останова).
Компоновка всей программы ничего не меняет.

Кто знает, встречался с подобным, посоветуйте с этим бороться.
И есть ли программы, проверяющие программы, разрабатываемые на VB6, на внутреннюю вшивость или аналогичные ситуации

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.10.2006 (Ср) 6:58

Телепаты где-то рядом...

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

Может код в студию?
Весь мир матрица, а мы в нем потоки байтов!

patq
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 06.08.2005 (Сб) 22:23
Откуда: Ижевск

Сообщение patq » 11.10.2006 (Ср) 20:46

!Viper! писал(а):Телепаты где-то рядом...

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

Может код в студию?

Программа пишется около года, к настоящему времени она содержит 37 модулей основного алгоритма (каждый модуль около 1000 строк ) , и подошла к грани управляемости. “Глючание” заметил около двух недель назад, когда перенес установку флагов из одного места в другое.
Поэтому в двух словах о программе.
Алгоритм программы линейный, никаких асинхронных операций. Почти вся работа происходит в программе. Последовательность этапов программы с учетом обращений вне программы:- формирую приложение
Set AccObj = CreateObject(i_"Access.Application.10")
- открываю файл (формат *.mdb),
-++ обращаюсь к приложению для открытия объекта
- ++ при работе с объектом периодически запрашиваю выделение памяти для таблиц
ReDim MasStrMod.OneStr(100)
- ++ - работаю в цикле, пока не кончатся объекты
- по итогам анализа вывод сообщений в текстовый файл

- в процессе работы периодически обновляю формы программы и выполняю команду
DoEvents

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 11.10.2006 (Ср) 21:07

Посоветовать что-нибудь конструктивное трудно, не видя кода. Несколько вопросов:

1. ReDim MasStrMod.OneStr(100)
Почему именно 100?
2. До переноса установки флагов в другое место "глюков" не было совсем или Вы их не замечали?
3. "Глюки" при запуске из-под IDE и из откомпилированного exe идентичные?
4. Обработка ошибок (On Error...) ведется? Ошибки бывают?

patq
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 06.08.2005 (Сб) 22:23
Откуда: Ижевск

Сообщение patq » 12.10.2006 (Чт) 21:18

Amed писал(а):Посоветовать что-нибудь конструктивное трудно, не видя кода.

Будет достаточно, одной ветви программы, работающей с одним объектом ?
Amed писал(а):1. ReDim MasStrMod.OneStr(100)
Почему именно 100?

Правильно:
ReDim Mas1(N) as UseTupe1
….
ReDim MasK(N) as UseTupeK, где N= 20…100
Amed писал(а):2. До переноса установки флагов в другое место "глюков" не было совсем или Вы их не замечали?

Впервые заметил при переносе флагов
Amed писал(а):3. "Глюки" при запуске из-под IDE и из откомпилированного exe идентичные?

Что такое IDE не знаю. Буду считать его Отладчиком.
Exe программу запускаю изредка, чтоб посмотреть ее работу с рабочими файлами, "Глюков" не замечал.
Все "Глюки" увидел при работе в отладчике.
В первый раз провел коррекцию, запустил по кнопке Запуск (треугольник влево) выдало не то количество ошибок. Ничего не корректирую, поставил точки останова в критических местах, прошел – количество ошибок в норме.
Подумал, полностью откомпилировал программу (команда Файл.Создать …), компилятор ошибок не выявил. Снова нажимаю кнопку Запуск, и прохожу все в без остановок, и опять не то количество ошибок
Amed писал(а):(On Error...) ведется? Ошибки бывают?

(On Error...) используется при формировании приложений и открытии файлов.
Вообще то поставлю и при открытии объектов

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 12.10.2006 (Чт) 23:02

Одной ветви программы, работающей с одним объектом? Недостаточно.

По поводу п.1 и п.2 все ясно :)

IDE - Integrated Developer Environment - отладчик, да.

Предложу следующий порядок действий:
1. реализуй запись в лог-файл при проверке на правильность, чтобы каждая найденная ошибка там отображалась;
2. скорми программе файл небольшого размера (для обозримости) с заранее выясненным вручную количеством ошибок;
3. добейся (подбором файла, очевидно) ситуации, когда количество ошибок будет неверным;
4. посмотри лог того, что делала программа, найди проблемное место в файле

А дальше советовать не могу - не знаю, что и как проверяется. Проверь алгоритм поиска ошибок, что ли.

patq
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 06.08.2005 (Сб) 22:23
Откуда: Ижевск

Сообщение patq » 14.10.2006 (Сб) 20:48

Amed писал(а):1. реализуй запись в лог-файл при проверке на правильность, чтобы каждая найденная ошибка там отображалась
Лог-файл – часто встречаю упоминание про него, а что это такое не знаю. Если не влом: его назначение и кто его создает.
Amed писал(а):2. скорми программе файл небольшого размера (для обозримости) с заранее выясненным вручную количеством ошибок;
так и поступаю
Amed писал(а):3. добейся (подбором файла, очевидно) ситуации, когда количество ошибок будет неверным;
Работаю с одним файлом, но к сожалению ошибка “плавающая”, за две недели она проявлялась всего два раза. После прохода с остановками в отладчике ошибка исчезает.
Amed писал(а):А дальше советовать не могу - не знаю, что и как проверяется. Проверь алгоритм поиска ошибок, что ли.
Сколько не встечался с "Глючанием", его причины всегда настолько просты, что на них даже не подумаешь. Обратился на форум в надежде, что кто-то уже не только наступил на эти грабли, но и НАШЕЛ их.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 14.10.2006 (Сб) 21:18

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

Запустилась у тебя программа - в файл дописывается строчка
14.10.2006 22:14 - Программа запущена

И так далее. Я предлагаю, чтобы в файл писалось событие проверки, вроде
14.10.2006 22:14 - Проверяем секцию №1. Найдено ошибок: 1 (переполнение буфера)
14.10.2006 22:14 - Проверяем секцию №2. Найдено ошибок: 2 (переполнение буфера; неверный символ)
14.10.2006 22:14 - Проверяем секцию №3. Найдено ошибок: 3 (переполнение буфера; неверный символ; неверное число)

Соображай, как написать такую функцию, пишущую в лог-файл события. Если мыслей не придет - я помогу. :)

patq
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 06.08.2005 (Сб) 22:23
Откуда: Ижевск

Сообщение patq » 15.10.2006 (Вс) 6:19

Amed писал(а):Лог-файл - это самый обычный текстовый файл, в который ты записываешь произошедшие события.
...
Соображай, как написать такую функцию, пишущую в лог-файл события. Если мыслей не придет - я помогу. :)

А ведь знал, но пока носом не ткнули :idea: , не видел пути, как без отладчика просматривать значение требуемых переменных

:P Спасибо Amed

Спасибо Всем за внимание, проявленное к моей проблеме


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 128

    TopList