debug - release problem [solved]
От: _hum_ Беларусь  
Дата: 12.08.16 11:55
Оценка:
в общем, раньше я не делал очень больших проектов, поэтому не придавал значения важности проверки работы релиз версии на всем этапе разработки. и вот теперь столкнулся с ситуацией — проект большой (около 1.2М в .rar самописного кода), дебаг-версия работает, как надо, релизная не так, как надо.
как бы на распутьи, как малой кровью из этой ситуации выкарабкаться.
первым делом включил уровень /w4 ворнингов, с надеждой обнаружить нужное. но нет, ничего значительного.
далее попытался проверить код встроенным в VS2013 анализатором кода, но анализатор споткнулся на попытках проанализировать используемые boost-овские файлы и выдал internal error
была надежда на psv-студию, но она только под win x64, а у меня стоит win7 x32
думал попробовать вручную — сделать ассерты для релизной версии, но хорошего решения, не засоряющего код, пока не нашел (у меня код, относящийся к бизнес-логике, работает только с boost и cereal, а код gui — на qt. выбросить ассерт через std::excеption (а как по-другому, чтоб универсально?) оказалось в qt проблематичным (qt, по-видимому, не очень дружит с c++ exception-ами)

вот и непонятно, в какую сторону двигаться

upd. суть оказалось в использовании неинициализированных переменных (почему-то vs не все случаи может отслеживать) — при установке в vs /sdl вероятно, студия начала перезаписывать эти переменные, и у меня перестал работать даже debug версия, что позволило легко обнаружить место и саму пробелему простым дебагингом.

всем спасибо за советы. приму на будущее к сведению
Отредактировано 12.08.2016 21:09 _hum_ . Предыдущая версия . Еще …
Отредактировано 12.08.2016 18:18 _hum_ . Предыдущая версия .
Re: debug - release problem
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 12.08.16 12:06
Оценка:
Здравствуйте, _hum_, Вы писали:

__>вот и непонятно, в какую сторону двигаться


1. Логи.
2. Если всё такое кроссплатформенное, то Linux.
Re: debug - release problem
От: kov_serg Россия  
Дата: 12.08.16 12:14
Оценка: +1
Здравствуйте, _hum_, Вы писали:

__> в общем, раньше я не делал очень больших проектов, поэтому не придавал значения важности проверки работы релиз версии на всем этапе разработки. и вот теперь столкнулся с ситуацией — проект большой (около 3М в .rar самописного кода), дебаг-версия работает, как надо, релизная не так, как надо.

__>как бы на распутьи, как малой кровью из этой ситуации выкарабкаться.
__>первым делом включил уровень /w4 ворнингов, с надеждой обнаружить нужное. но нет, ничего значительного.
__>далее попытался проверить код встроенным в VS2013 анализатором кода, но анализатор споткнулся на попытках проанализировать используемые boost-овские файлы и выдал internal error
__>была надежда на psv-студию, но она только под win x64, а у меня стоит win7 x32
__>думал попробовать вручную — сделать ассерты для релизной версии, но хорошего решения, не засоряющего код, пока не нашел (у меня код, относящийся к бизнес-логике, работает только с boost и cereal, а код gui — на qt. выбросить ассерт через std::excеption (а как по-другому, чтоб универсально?) оказалось в qt проблематичным (qt, по-видимому, не очень дружит с c++ exception-ами)

__>вот и непонятно, в какую сторону двигаться


Попробуй разные уровние оптимизации в release.
Re[2]: debug - release problem
От: _hum_ Беларусь  
Дата: 12.08.16 12:25
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Попробуй разные уровние оптимизации в release.


и как это поможет, даже если я увижу, что при каком-то уровне работать начинает нормально — как я найду ошибку в проге (ведь, наверняка, она есть)?
Re[2]: debug - release problem
От: _hum_ Беларусь  
Дата: 12.08.16 12:28
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Здравствуйте, _hum_, Вы писали:


__>>вот и непонятно, в какую сторону двигаться


N>1. Логи.


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

N>2. Если всё такое кроссплатформенное, то Linux.


а при чем тут Ос? вроде, проблема кросс-платформенная
Re: debug - release problem
От: Videoman Россия https://hts.tv/
Дата: 12.08.16 12:38
Оценка: +1
Здравствуйте, _hum_, Вы писали:

__>вот и непонятно, в какую сторону двигаться


1. Попытайтесь комментарить подозрительные функции и смотреть будет ли проявляться глюки, пытаясь локализовать проблему постепенно сужая облать до одной функции/класса
2. Если дебаг работает нормально, не "проезжая" по памяти, то следующая наиболее вероятная проблема, это что-то где-то не инициализировано. Проинициализируте везде, где можно, все переменные и буфера нулями. 90% что баг в этом.
Re: debug - release problem
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.08.16 12:54
Оценка: +2
Здравствуйте, _hum_, Вы писали:

__>как бы на распутьи, как малой кровью из этой ситуации выкарабкаться.


А никак. Отлаживать заново.

Вообще никогда не понимал, зачем нужна Debug-сборка. Вместо одной программы приходится тестировать и отлаживать две.
Re[2]: debug - release problem
От: _hum_ Беларусь  
Дата: 12.08.16 13:02
Оценка:
Здравствуйте, Videoman, Вы писали:

V>Здравствуйте, _hum_, Вы писали:


__>>вот и непонятно, в какую сторону двигаться


V>1. Попытайтесь комментарить подозрительные функции и смотреть будет ли проявляться глюки, пытаясь локализовать проблему постепенно сужая облать до одной функции/класса


во-первых, функций слишком много, во-вторых, перекомпиляция обычно занимает около 5-10 минут — у просто физически не смогу все возможные варианты проверить

V>2. Если дебаг работает нормально, не "проезжая" по памяти, то следующая наиболее вероятная проблема, это что-то где-то не инициализировано. Проинициализируте везде, где можно, все переменные и буфера нулями. 90% что баг в этом.


но ведь w4 не ругался (обычно он ругается на неинициализированные).
Re[3]: debug - release problem
От: Videoman Россия https://hts.tv/
Дата: 12.08.16 13:28
Оценка:
Здравствуйте, _hum_, Вы писали:

__> во-первых, функций слишком много, во-вторых, перекомпиляция обычно занимает около 5-10 минут — у просто физически не смогу все возможные варианты проверить

Используйте градиентный спуск, метод деления пополам (примерно), придется компилировать.

__>но ведь w4 не ругался (обычно он ругается на неинициализированные).

Только на самые простые случаи. Сомневаюсь что он проверяет поля классов и все буфера и указатели.

дебаг-версия работает, как надо, релизная не так, как надо

что изменяется то хоть можно узнать ?
Re: debug - release problem
От: lpd Черногория  
Дата: 12.08.16 13:40
Оценка:
Здравствуйте, _hum_, Вы писали:

__> в общем, раньше я не делал очень больших проектов, поэтому не придавал значения важности проверки работы релиз версии на всем этапе разработки. и вот теперь столкнулся с ситуацией — проект большой (около 3М в .rar самописного кода), дебаг-версия работает, как надо, релизная не так, как надо.


__>вот и непонятно, в какую сторону двигаться


Такое случается если где-то портишь память. В debug-версии там хранится отладочная информация, а в release по этому адресу могут быть необходимые данные.
Привело к этому, скорее всего, какое-то недавнее изменение, — иначе перезапись памяти бы проявилась ранее.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Отредактировано 12.08.2016 13:44 lpd . Предыдущая версия . Еще …
Отредактировано 12.08.2016 13:44 lpd . Предыдущая версия .
Отредактировано 12.08.2016 13:43 lpd . Предыдущая версия .
Отредактировано 12.08.2016 13:41 lpd . Предыдущая версия .
Re[3]: debug - release problem
От: tdiff  
Дата: 12.08.16 13:53
Оценка:
Здравствуйте, _hum_, Вы писали:

__>Здравствуйте, kov_serg, Вы писали:


_>>Попробуй разные уровние оптимизации в release.


__>и как это поможет, даже если я увижу, что при каком-то уровне работать начинает нормально — как я найду ошибку в проге (ведь, наверняка, она есть)?


Например, непадающая программа, собранная в релизе с выключенной оптимизацией, это гораздо лучше, чем объяснять заказчику, что нет вообще ничего.
Re[4]: debug - release problem
От: _hum_ Беларусь  
Дата: 12.08.16 14:13
Оценка:
Здравствуйте, tdiff, Вы писали:

T>Здравствуйте, _hum_, Вы писали:


__>>Здравствуйте, kov_serg, Вы писали:


_>>>Попробуй разные уровние оптимизации в release.


__>>и как это поможет, даже если я увижу, что при каком-то уровне работать начинает нормально — как я найду ошибку в проге (ведь, наверняка, она есть)?


T>Например, непадающая программа, собранная в релизе с выключенной оптимизацией, это гораздо лучше, чем объяснять заказчику, что нет вообще ничего.


во-первых, мне скорость критична (поэтому оптимизацию снижать — это плохо), во-вторых, это работа не из ряда "ради галочки", ну и в-третьих, самое важное — это же означает, что возможно, в проге есть ошибка, и как ее отдавать, зная, что она там?
Re[3]: debug - release problem
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 12.08.16 14:14
Оценка: 1 (1)
Здравствуйте, _hum_, Вы писали:

__>и как это по-хорошему огранизтвать, чтоб н едублировать и assert в дебаг-версии и логирвоание? и оно должно включаться макросами, или в самом приложении (чтобы пользователь имел возможность включать логирование, чтобы отправлять разработчику)?


glogs, например.

N>>2. Если всё такое кроссплатформенное, то Linux.

__>а при чем тут Ос? вроде, проблема кросс-платформенная

В другой ОС другие средства для анализа, другой компилятор.
Re[4]: debug - release problem
От: _hum_ Беларусь  
Дата: 12.08.16 14:17
Оценка:
Здравствуйте, Videoman, Вы писали:

V>Здравствуйте, _hum_, Вы писали:


__>> во-первых, функций слишком много, во-вторых, перекомпиляция обычно занимает около 5-10 минут — у просто физически не смогу все возможные варианты проверить

V>Используйте градиентный спуск, метод деления пополам (примерно), придется компилировать.

это "сферический конь в вакууме" (кстати, как вы градиент-то искать будете. или имели в виду покоординатный?

__>>но ведь w4 не ругался (обычно он ругается на неинициализированные).

V>Только на самые простые случаи. Сомневаюсь что он проверяет поля классов и все буфера и указатели.

вроде, проверяет. по кр. мере, при попытке использования неинициализированной переменной он выдавал исключение.

V>

V>дебаг-версия работает, как надо, релизная не так, как надо

V>что изменяется то хоть можно узнать ?

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

[да-да, знаю, что можно повводить коды невалидности и отслеживать, что да как. но это все-таки серьезный кусок работы, ис перва хотелось бы выслушать другие варианты решения, чтоб уже с чистой совестью закасывать рукава]
Re[5]: debug - release problem
От: tdiff  
Дата: 12.08.16 14:18
Оценка:
Здравствуйте, _hum_, Вы писали:

__> во-первых, мне скорость критична (поэтому оптимизацию снижать — это плохо), во-вторых, это работа не из ряда "ради галочки", ну и в-третьих, самое важное — это же означает, что возможно, в проге есть ошибка, и как ее отдавать, зная, что она там?


смотря по обстоятельствам
Re[2]: debug - release problem
От: _hum_ Беларусь  
Дата: 12.08.16 14:19
Оценка:
Здравствуйте, lpd, Вы писали:

lpd>Здравствуйте, _hum_, Вы писали:


__>> в общем, раньше я не делал очень больших проектов, поэтому не придавал значения важности проверки работы релиз версии на всем этапе разработки. и вот теперь столкнулся с ситуацией — проект большой (около 3М в .rar самописного кода), дебаг-версия работает, как надо, релизная не так, как надо.


__>>вот и непонятно, в какую сторону двигаться


lpd>Такое случается если где-то портишь память. В debug-версии там хранится отладочная информация, а в release по этому адресу могут быть необходимые данные.

lpd>Привело к этому, скорее всего, какое-то недавнее изменение, — иначе перезапись памяти бы проявилась ранее.

мне тоже так кажется. вот как такую гадость отловить... раньше помогал анализатор кода, но сейчас он, видите, не способен переварить проект
может, есть какие-то сторонние анализаторы именно такой проблемы?
Re[3]: debug - release problem
От: lpd Черногория  
Дата: 12.08.16 14:22
Оценка: 1 (1)
Здравствуйте, _hum_, Вы писали:

__>Здравствуйте, lpd, Вы писали:


lpd>>Здравствуйте, _hum_, Вы писали:


__>>> в общем, раньше я не делал очень больших проектов, поэтому не придавал значения важности проверки работы релиз версии на всем этапе разработки. и вот теперь столкнулся с ситуацией — проект большой (около 3М в .rar самописного кода), дебаг-версия работает, как надо, релизная не так, как надо.


__>>>вот и непонятно, в какую сторону двигаться


lpd>>Такое случается если где-то портишь память. В debug-версии там хранится отладочная информация, а в release по этому адресу могут быть необходимые данные.

lpd>>Привело к этому, скорее всего, какое-то недавнее изменение, — иначе перезапись памяти бы проявилась ранее.

__>мне тоже так кажется. вот как такую гадость отловить... раньше помогал анализатор кода, но сейчас он, видите, не способен переварить проект

__>может, есть какие-то сторонние анализаторы именно такой проблемы?

Можно попробовать запустить под valgrind. Также в аналогичной ситуации мне однажды пришлось перегружать во всем проекте функции выделения памяти, метить границы буферов и вести счетчики выделения/освобождения, — эти меры помогли. Но скорее всего, дело в недавних изменениях, и может оказаться легче откатывать постепенно все правки, пока программа не начнет стабильно работать
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re[5]: debug - release problem
От: Videoman Россия https://hts.tv/
Дата: 12.08.16 14:28
Оценка:
Здравствуйте, _hum_, Вы писали:

__> это "сферический конь в вакууме" (кстати, как вы градиент-то искать будете. или имели в виду покоординатный?

ну придумайте метрику какую-нибудь

__>есть модель, есть эмулятор работы с ней. так вот в релизе эмулятор говорит, что модель невалидна

Эмулятор конечно же "черный ящик". Упростить модель можно? Пустая модель тоже невалидна?
А многопоточность есть?
Re[6]: debug - release problem
От: _hum_ Беларусь  
Дата: 12.08.16 14:59
Оценка:
Здравствуйте, Videoman, Вы писали:

V>Здравствуйте, _hum_, Вы писали:


__>>есть модель, есть эмулятор работы с ней. так вот в релизе эмулятор говорит, что модель невалидна

V>Эмулятор конечно же "черный ящик".

все — белый ящик. просто очень большой и не совсмем прозрачный. поэтому лезть в него ох как неохота.

V>Упростить модель можно? Пустая модель тоже невалидна?


пустая модель невалидна для эмулятора по определению

V>А многопоточность есть?


есть, но чисто для gui (ею можно пренебречь)
Re: debug - release problem
От: Evgeny.Panasyuk Россия  
Дата: 12.08.16 15:13
Оценка:
Здравствуйте, _hum_, Вы писали:

__>вот и непонятно, в какую сторону двигаться


Как вариант можешь выключить оптимизацию в release — если результат станет "нормальным", то можешь постепенно включать/выключать оптимизацию в отдельных translation units по методу divide and conquer. Так за логарифмическое число шагов локализуешь хотя бы один проблемный TU. Далее например можешь включать/выключать оптимизацию на уровне функций.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.