2015-05-12 3 views
0

Я знаю какое-то время, что VB6 - проблема, но что я могу сделать - у меня есть унаследованная система для поддержания и она все еще развивается здесь и там.VB6 создает коррумпированные компиляции ...?

И у меня было самое странное, что когда-либо случалось со мной с VB6 сейчас.

Скомпилирована новая версия нашего приложения. Протестировано - это сработало.

Развернуто на клиентской производственной площадке. Приложение продолжает сбой! Когда? Когда пользователь щелкает в любом месте внутри элемента управления DHTMLEdit, который у нас есть в определенном окне. Или иногда даже в окне, которое его содержит.

Теперь у меня было это раньше, и решение всегда было очень загадочным. Поэтому я попробовал следующее: увеличил номер версии проекта на 1, перекомпилировал и угадал, что?

Работает отлично.

Я не могу показать код, потому что здесь мы говорим о 50 000 строк кода, и при щелчке по элементу управления DHTMLEdit, форме, нет никакого специального кода.

Мне просто интересно, встретил ли кто-нибудь еще эту странность.

+0

Как вы развернуть скомпилированного приложения? При использовании любого типа установщика, возможно, некоторые компоненты не обновлялись до увеличения номера версии. (Мы здесь использовали VB6 в течение многих лет, только проблемы с компиляцией были небольшими случаями, когда мы выбрали некоторые оптимизации в свойствах проекта, иначе никаких сбоев. Конечно, было множество проблем с установкой.) – Arvo

+0

@Arvo - спасибо за комментирование. Программа использует множество внешних зависимостей, но мы не изменили их, поэтому мы только развернули основной файл .exe. Это очень странно, я использую его в течение многих лет, и этого никогда не было раньше. – user884248

+1

Это может быть некоторая ошибка [памяти, диска, другого оборудования] при компиляции. Конечно, вы должны обратить внимание на jmoreno ответ либо - ничего не гарантируется в мире программного обеспечения :) – Arvo

ответ

2

Компилятор VB6 не является детерминированным компилятором и не производит ничего похожего на согласованный вывод. IOW, а исправление вашей ошибки не по дизайну, факт, что он может привести к такому поведению.

Но даже в детерминированных компиляторов, делая небольшие изменения иногда могут «исправить» (ака скрыть) ошибки, которые вызываются выравниваний памяти или переменной initialition

+0

Спасибо за этот комментарий. Так это на самом деле то, что может случиться? Есть ли способ сказать, кроме как до отправки продукта, кроме тестирования на нескольких машинах? – user884248

+1

Нет, проверьте на разных машинах и проверьте версию, которую вы собираетесь развернуть - перекомпиляция без изменений кода радикально изменит сгенерированный вывод (ваша программа). В качестве побочного примечания я бы рассмотрел 50 КБ LOC в рамках «он может и должен быть перенесен, если мы его используем». Я знаю, что никто не любит что-то делать, когда нет видимого преимущества конечного пользователя, но я бы рекомендовал его, если это вообще возможно. – jmoreno

+0

@jmoreno, позаботьтесь о некоторых ссылках, чтобы обосновать ваши претензии? Используя бинарную совместимость для компонентов, мы здесь не видели «радикально модифицированных» результатов, но мы не анализировали так глубоко. – Arvo