Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/58: Рейтинг темы: голосов - 58, средняя оценка - 4.59
 Аватар для SAkonst
2 / 2 / 0
Регистрация: 11.02.2012
Сообщений: 19

Не работает в release

15.02.2012, 22:27. Показов 10799. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток,

Столкнулся со следующей проблемой: При выполнении Debug Build - MFC программа работает корректно.
Собираю Release build. Запускаю exe из папки Release. Окно запускается, все как надо, но программа не считает. Причем по скорости вывода ответа кажется, что она даже не проходит по алгоритму.
Работаю в Visual Studio 2010.

Может есть есть какие оптимизаторы кода, которые "мешают" или, может быть, другие подводные камни.
Подскажите, пожалуйста, как правильно собрать окончательный Release.

Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2012, 22:27
Ответы с готовыми решениями:

Release не работает, Debug работает
Здравствуйте, подскажите в чем может быть проблема, написал программу (тестирование), запускал, проверял все норм. В настройках стояло:...

Release работает, Debug - ошибка
Подскажите, товарищи. Есть код (взял с форума) : #include <iostream> #include <fstream> #include <string> #include...

Программа в режиме Debug работает правильно, а в Release выдает бред
Сделал вот такую программу (она задаёт массив и при вводе 0 или "конце" массива выдаёт максимальное значение массива.): #include...

9
 Аватар для ШКІПЕР
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
15.02.2012, 22:37
SAkonst:
1. Вы уверены, что сборка действительно в Release ?
2. Проект в студия (если © не мешает).


Добавлено через 2 минуты
На самом деле это делается так:



Добавлено через 1 минуту
Цитата Сообщение от SAkonst Посмотреть сообщение
Может есть есть какие оптимизаторы кода, которые "мешают" или, может быть, другие подводные камни.
К сожалению, телепатов здесь нет.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.02.2012, 22:41
в релизе тоже можно подебажить. ну или логи вставить и посмотреть что происходит.
еще бывает ошибка, когда вызов функции вставляют в ассерт. в дебаге вызова не будет. у вас нет такого случайно?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
15.02.2012, 22:54
выход за пределы массива
утечка памяти
и много косяков где дебаг справляется а релиз падает

Добавлено через 1 минуту
Цитата Сообщение от DU Посмотреть сообщение
когда вызов функции вставляют в ассерт
ну и это тоже
для проверки функций макрос VERIFY

Добавлено через 2 минуты
Цитата Сообщение от DU Посмотреть сообщение
в релизе тоже можно подебажить.
трудно это после оптимизатора код на себя не похож
да и ассемблера много
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.02.2012, 22:56
поправляюсь: выражения в макросах вроде ассерта не будут выполняться в релизе, а не в дебаге.

все таки кое-что можно попробовать подебажить в релизе. если не получается, то логи помогут.
0
 Аватар для SAkonst
2 / 2 / 0
Регистрация: 11.02.2012
Сообщений: 19
15.02.2012, 23:24  [ТС]
Вы уверены, что сборка действительно в Release ?
А как выяснить в release или нет. Дословно я делаю следующее: Build -> Configuration Manager, а там меняю configuration c debug на release (скриншот). После чего нажимаю Rebuild Solution и получаю exe с файлом pdb (который я так понимаю не очень-то и нужен конечному пользователю) в папке Release.

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

Мой код исполняется при нажатии только одной кнопки и syslink. Весь остальной проект сотворен самой студией при создании MFC
(простите, комментарии пока не писал. При необходимости добавлю)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
void CSearchWordsDlg::OnBnClickedCheck1()
{
    if (check == 0)
        check = 1;
    else
        check = 0;
    if (m_EditControlLCon.EnableWindow(FALSE))
        m_EditControlLCon.EnableWindow(TRUE);
}
void CSearchWordsDlg::OnBnClickedButton1()
{
    UpdateData(TRUE);
 
    #define BUFFSIZE 100
    char word[BUFFSIZE];
    int counter = 0;
    int counter2 = 0;
    int i;
    int n = 0;
    int j;
    int log = 0;
    int progress = 0;
    CString counterS;
    CString counterS2;
    CString LastChar;
    
    FILE *filedict;
    FILE *filelog;
    filedict = fopen ("zdb-win.txt", "r");
    filelog = fopen ("Filelog.txt", "w");
    
    if (filedict == 0)
                {
                    MessageBox(_T("Dictionary not found. It must be in folder with program. Please check"));
                    return ;
                }
 
    if (m_EditControlFC.GetLength() == 0 || (m_EditControlFC.GetLength() != 0 &&  check == 1 && m_EditControlLCon.GetWindowTextLength() == 0))
                {       
                    MessageBox (_T("Please, insert characters into field"));
                    return;
                }
    else if (m_EditControlLCon.GetWindowTextLength() > 1)
                {
                    MessageBox (_T("Only one simbol in last character"));
                    return;
                }
            
            
            m_EditControlRes.SetWindowText(_T("Searching..."));
            m_EditControlRes.UpdateWindow();
 
    while (! feof (filedict))
        {
            counterS.Format(_T("%d"), counter);
            counterS2.Format(_T("%d"), counter2);
            memset (word, 0, BUFFSIZE);
            i = 0;
            fscanf (filedict, "%s", word);
 
            while (word[i] == m_EditControlFC.GetAt(i) && m_EditControlFC.GetAt(i + 1) != 0)
                    i = i + 1;
            if (word[i] == m_EditControlFC.GetAt(i))
                {
                    counter = counter + 1;
                    if (check == 0)
                        fprintf (filelog, "%s \n", word);
                }
            
            progress = 1;
 
            if (m_EditControlLCon.GetWindowTextLength() == 1 && check == 1)
                {
                    m_EditControlLCon.GetWindowText(LastChar);
                    j = i;
                    while (word[j] != 0)
                        {
                            j = j + 1;
                            if (LastChar == word[j] && m_EditControlFC.GetAt(i) == word[i] && word[j + 1] == 0)
                                {
                                    fprintf (filelog, "%s \n", word);
                                    log = 1;
                                    counter2 = counter2 + 1;
                                }                       
                        }
                }
            }
            if (log == 0 && progress != 0 && counter == 0 || log == 0 && progress != 0 && check == 1)
                    m_EditControlRes.SetWindowText(_T("No match"));
            if (counter != 0 && check == 0)
                    m_EditControlRes.SetWindowText(counterS);
            if (log != 0)
                    m_EditControlRes.SetWindowText(counterS2);
            
            m_EditControlRes.UpdateWindow();
    
    fclose (filedict);
    fclose (filelog);
    progress = 0;
 
}
 
 
void CSearchWordsDlg::OnNMClickSyslink1(NMHDR *pNMHDR, LRESULT *pResult)
{
    PNMLINK pNMLink = (PNMLINK)pNMHDR;
    ::ShellExecute (m_SysLink.m_hWnd, _T("open"), _T("Filelog.txt"), NULL, NULL, SW_SHOWNORMAL);
    *pResult = 0;}
еще бывает ошибка, когда вызов функции вставляют в ассерт.
Покажусь нубом, но что есть "ассерт"?

трудно это после оптимизатора код на себя не похож
А есть возможность отключить оптимизаторы?

все таки кое-что можно попробовать подебажить в релизе
Опять-таки покажусь нубом. Как дебажить в релизе? Не работает если запускать сам exe, а внутри студии даже, если build стоит на Release то работает.
Миниатюры
Не работает в release  
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.02.2012, 23:35
assert(exp);
если в дебаге выражение не будет истинно (false), вылезет окно, в котором будет написано где и что сработало не так, как вы ожидали. поведение ассерта можно кастомизировать, но если ничего не трогать, то так и будет. попробуйте у себя в коде где-нибудь написать assert(false); (длф MFC вроде правильнее использовать ASSERT(false)) и посмотрите что получится. В релизе этот макрос пустой, поэтому ничего не происходит.

в резиле дебажится так же как и в дебаге. в студии расставляете брейк поинты и по F5 запускаете прогу. Правда в этом случае студия может не останавливаться в некоторых точках, курсор выполнения загадочно скакать и прочие глюки.
0
 Аватар для SAkonst
2 / 2 / 0
Регистрация: 11.02.2012
Сообщений: 19
15.02.2012, 23:37  [ТС]
DU, спасибо, попробую
0
Заблокирован
16.02.2012, 01:04
я бы особое внимание уделил второму предложению в #3 посте данной темы.
0
 Аватар для SAkonst
2 / 2 / 0
Регистрация: 11.02.2012
Сообщений: 19
17.02.2012, 02:35  [ТС]
Всем спасибо большое. Разобрался в чем проблема:
При создании проекта в мастере выставил Use Unicode Character Set. Потом ручками поменял в свойствах солюшна на Use Multi-Byte Character Set. Но только не сообразил, что в release configuraion тоже поменять надо. Поэтому а релизе и не работало.
Теперь все в порядке.
Спасибо всем за внимание и подсказки))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2012, 02:35
Помогаю со студенческими работами здесь

Проект под Win32 Release (exe-шник, который работает на любом ПК)
Использую IDE Visual C++ 2010, cкомпилировал проект под Win32 Release. Появился в папке Realease exe- шник. Программ является...

Приложение работает в Debug, странно работает в Release и не работает при билде
Действия выполняются на эмуляторе Pixel 2. Android 9.0. Если я запускаю приложение с конфигурацией Debug, то всё в порядке. При запуске же...

STM32. SD карта работает в release, но не работает в debug
Здравствуйте. У меня следующая проблема: SD карта инициализируется только в release сборке. Если пробовать инициализировать SD карту в...

Ничего не работает в debug конфигурации, но работает в release
Что делать, если в visual studio, при компилировании в debug, компилятор выдаёт ошибку, при том что в release всё нормаьно

Код работает в debug но не работает в release
#include "stdafx.h" #include "mxml.h" #include "stdio.h" int main(){ mxml_node_t *topNode; FILE *f=NULL; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru