Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/37: Рейтинг темы: голосов - 37, средняя оценка - 4.73
2 / 2 / 0
Регистрация: 11.02.2012
Сообщений: 19
1

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

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

Доброго времени суток,

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

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

Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2012, 22:27
Ответы с готовыми решениями:

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

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

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

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

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


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



Добавлено через 1 минуту
Цитата Сообщение от SAkonst Посмотреть сообщение
Может есть есть какие оптимизаторы кода, которые "мешают" или, может быть, другие подводные камни.
К сожалению, телепатов здесь нет.
0
DU
1495 / 1141 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.02.2012, 22:41 3
в релизе тоже можно подебажить. ну или логи вставить и посмотреть что происходит.
еще бывает ошибка, когда вызов функции вставляют в ассерт. в дебаге вызова не будет. у вас нет такого случайно?
0
Модератор
Эксперт по электронике
8514 / 6329 / 857
Регистрация: 14.02.2011
Сообщений: 21,978
15.02.2012, 22:54 4
выход за пределы массива
утечка памяти
и много косяков где дебаг справляется а релиз падает

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

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

все таки кое-что можно попробовать подебажить в релизе. если не получается, то логи помогут.
0
2 / 2 / 0
Регистрация: 11.02.2012
Сообщений: 19
15.02.2012, 23:24  [ТС] 6
Вы уверены, что сборка действительно в 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
1495 / 1141 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.02.2012, 23:35 7
assert(exp);
если в дебаге выражение не будет истинно (false), вылезет окно, в котором будет написано где и что сработало не так, как вы ожидали. поведение ассерта можно кастомизировать, но если ничего не трогать, то так и будет. попробуйте у себя в коде где-нибудь написать assert(false); (длф MFC вроде правильнее использовать ASSERT(false)) и посмотрите что получится. В релизе этот макрос пустой, поэтому ничего не происходит.

в резиле дебажится так же как и в дебаге. в студии расставляете брейк поинты и по F5 запускаете прогу. Правда в этом случае студия может не останавливаться в некоторых точках, курсор выполнения загадочно скакать и прочие глюки.
0
2 / 2 / 0
Регистрация: 11.02.2012
Сообщений: 19
15.02.2012, 23:37  [ТС] 8
DU, спасибо, попробую
0
Заблокирован
16.02.2012, 01:04 9
я бы особое внимание уделил второму предложению в #3 посте данной темы.
0
2 / 2 / 0
Регистрация: 11.02.2012
Сообщений: 19
17.02.2012, 02:35  [ТС] 10
Всем спасибо большое. Разобрался в чем проблема:
При создании проекта в мастере выставил Use Unicode Character Set. Потом ручками поменял в свойствах солюшна на Use Multi-Byte Character Set. Но только не сообразил, что в release configuraion тоже поменять надо. Поэтому а релизе и не работало.
Теперь все в порядке.
Спасибо всем за внимание и подсказки))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2012, 02:35

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.