дебаг работает, релиз нет...

shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

дебаг работает, релиз нет...

Post by shadow7256 »

Может кто имел подобную ситуацию...

Дебаговая версия приложения работает нормально. Неважно запускаешь приложение из среды, либо отдельный екзешник - нет проблем.

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

Попросил релизную версию сгенерить дебажную информацию - такая конфигурация работает только если запускать из среды через F5 (в чистом дебаге).

Если же запускапть отдельынй екзешник из директории или из среды - не работает.

Что конкретно не работает - не вызывается метод один (call back). Объяснять подробнее очень долго.

Меня интересует из за каких установок ведут себя две сборки :pain1:
User avatar
Okie
Уже с Приветом
Posts: 932
Joined: 18 Mar 2000 10:01
Location: Seattle

Post by Okie »

Project settings могут быть разными в дебаг и релиз. Например, calling convention, linkage settings и все, что угодно. Это может служить замечательным источником подобных глюков :gen1:
Hatih
Уже с Приветом
Posts: 750
Joined: 10 Dec 2003 20:11

Post by Hatih »

Две идеи:

1. Проверь во всех ли нужных местах volatile стоит (ну там обращения к hardware registers, etc.)

2. А может просто memory corruption? Тогда любое неосторожное движение может поменять поведение програмы. Лекарство - valgrind (linux). наверняка для виндов что-то подобное есть.
User avatar
IA72
Уже с Приветом
Posts: 956
Joined: 04 Mar 2002 10:01

Re: дебаг работает, релиз нет...

Post by IA72 »

shadow7256 wrote:Что конкретно не работает - не вызывается метод один (call back). Объяснять подробнее очень долго.

Меня интересует из за каких установок ведут себя две сборки :pain1:


Среду и средство разработки вы не назвали, но исходя из "сборок" это вполне может быть .NET. Информации не много, попробуйте для начала

а) посмотреть pre & post build events для debug & release
б) Посмотреть одинаковый ли набор проектов в solution для компиляции в обоих режимах.
в) Нет ли ifdef (!)DEBUG (это видно в среде, если код активен или нет)
г) Одинаковый ли набор dll в target folders после билда
д) Внимательно просмотреть все warnings (если есть :)

Если бы это была, к примеру, Delphi, то я бы грешил на уничтоженный но не обнуленный объект.
User avatar
janya
Удалён за грубость
Posts: 5433
Joined: 22 Jan 2003 21:38
Location: San Diego, CA

Post by janya »

Если эта штука multithreaded и есть race-conditions то debug может эти проблемы прятать, а в release варианте они происходят на полную катушку.
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Post by shadow7256 »

janya wrote:Если эта штука multithreaded и есть race-conditions то debug может эти проблемы прятать, а в release варианте они происходят на полную катушку.


да это multithreaded.
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Post by shadow7256 »

Среда - Visual Studio 6.0 (Visual C++).

их всех предупреждений которые вываливаются на компиляции:

LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /INCREMENTAL:NO specification

LINK : warning LNK4098: defaultlib "mfc42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library

LINK : warning LNK4098: defaultlib "mfcs42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library

LINK : warning LNK4049: locally defined symbol ""public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_s
tring@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ)" imported

LINK : warning LNK4049: locally defined symbol ""public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *,class st
d::allocator<char> const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDABV?$allocator@D@1@@Z)" imported

LINK : warning LNK4049: locally defined symbol "__setmbcp" imported
Big Cheese
Уже с Приветом
Posts: 1211
Joined: 02 Jul 2000 09:01
Location: SFBA

Post by Big Cheese »

Похоже что MFC линкуется в одном месте как static lib, в другом - как shared DLL. Плюс с STL что-то непонятное - разберитесь, откуда std::basic_string вдруг стал и locally defined и imported...
Hamster
Уже с Приветом
Posts: 11475
Joined: 20 Nov 2000 10:01
Location: Escondido, CA

Post by Hamster »

90%, что memory corruption или доступ к неинициализированной переменной.

Сделайте release build с включенной debug info и без оптимизаций.
Как вы говорите, такой build не работает, только если его запускать из директории или среды. Не беда. Запускаете .exe и подключаетесь к нему дебаггером ( build -> start debug -> attach to process ). Разбираетесь, какой адрес corrupted. Потом перезапускаете, ставите breakpoint на запись в это место в памяти.
User avatar
Okie
Уже с Приветом
Posts: 932
Joined: 18 Mar 2000 10:01
Location: Seattle

Post by Okie »

shadow7256 wrote:Среда - Visual Studio 6.0 (Visual C++).


LINK : warning LNK4098: defaultlib "mfc42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library

LINK : warning LNK4098: defaultlib "mfcs42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library

Это релиз билд такие сообщения выдает? Если да, то похоже, у вас runtime library неправильная линкуется. Например, у вас в project settings (C++) может быть выбрано runtime library: multithreaded debug вместо multithreaded. И еще, если несколько модулей линкуются вместе, то надо, чтобы они использовали одну и ту же runtime library.
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Post by Boriskin »

Hamster wrote:90%, что memory corruption или доступ к неинициализированной переменной.


Кстати да, руками забейте нолями все переменные, мне когда то помогло в аналогичной ситуации.
Тупизна как Энтропия. Неумолимо растет.
User avatar
Nervous
Уже с Приветом
Posts: 7759
Joined: 18 Sep 2001 09:01
Location: RUS.76 -> KOR -> RUS.53 -> US.PA -> US.MD

Post by Nervous »

Hamster wrote:90%, что memory corruption или доступ к неинициализированной переменной.

Сделайте release build с включенной debug info и без оптимизаций.
Как вы говорите, такой build не работает, только если его запускать из директории или среды. Не беда. Запускаете .exe и подключаетесь к нему дебаггером ( build -> start debug -> attach to process ). Разбираетесь, какой адрес corrupted. Потом перезапускаете, ставите breakpoint на запись в это место в памяти.


Second that. Я бы сразу скомпилял с BoundsChecker-ом Instrumental Build - все бы и вылезло (и еще возможно много бы нового узнали о своем коде :wink: )
N.E.R.V.O.U.S.: Networked Electronic Replicant Viable for Observation and Ultimate Sabotage.
User avatar
Veselchak U
Уже с Приветом
Posts: 1787
Joined: 27 Nov 2002 05:24
Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Post by Veselchak U »

АССЕРТом пользуетесь? Если да, то посмотрите нет ли нужного кода внутри АССЕРТа. В релизе АССЕРТ маkро отключается.
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Post by shadow7256 »

Проблема действительно была в том, что происходило обращение к переменной, состояние которой было не определено. Точнее оно было определено, но неправильно из за того, что при переносе некоторых функциональных частей из одного (корректно работающего) приложения в другое (проблемное) кое какие части были удалены за ненужностью но удалены не до конца. В результате остались какие то разорваные кусочки, которые вызывались почему то в релизе только, а в дебаге не вызывались.

Почистив все до конца вроде заработало, но закралось подозрение, что таких "опухолей" может быть еще несколько :cry:
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Post by Boriskin »

shadow7256 wrote:Почистив все до конца вроде заработало, но закралось подозрение, что таких "опухолей" может быть еще несколько :cry:


Главное чтоб опухоль была не раковая! :-)
Тупизна как Энтропия. Неумолимо растет.
Hatih
Уже с Приветом
Posts: 750
Joined: 10 Dec 2003 20:11

Post by Hatih »

shadow7256 wrote:Проблема действительно была в том, что происходило обращение к переменной, состояние которой было не определено.

....

но закралось подозрение, что таких "опухолей" может быть еще несколько :cry:


gcc или g++ с ключами " -Wall -O2" прекрасно об этом предупреждают. И, кстати, они доступны в виндах тоже в составе пакета cygwin.
ppk
Уже с Приветом
Posts: 132
Joined: 06 Nov 2003 08:36
Location: UA -> IA

Post by ppk »

ppk
Уже с Приветом
Posts: 132
Joined: 06 Nov 2003 08:36
Location: UA -> IA

Post by ppk »

Return to “Вопросы и новости IT”