Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Visual Studio

Войти
Регистрация
Восстановить пароль
 
 
Leardjiny
0 / 0 / 1
Регистрация: 22.09.2013
Сообщений: 145
#1

Зависает часть кода - Visual Studio

11.01.2017, 09:15. Просмотров 544. Ответов 28
Метки нет (Все метки)

Добрый день.
У меня Visual Studio 2010, пользуюсь уже давно, но вчера столкнулся с такой проблемой:

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

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

Странно, что в том же файле и классе остальные функции работают нормально, а такая ситуация лишь с одной функцией.

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

Подскажите пожалуйста, в чем может быть дело?
Раньше все работало нормально, может я что-то не так в настройках случайно сделал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2017, 09:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зависает часть кода (Visual Studio):

Как спрятать большую часть кода - Visual Studio
у меня есть массив 27*27 он очень громоздкий можно ли как нибудь облегчить файл program? может класс создать какой нибудь или...

Выделение цветом синтаксиса при отображении кода в редакторе кода Visual Studio - Visual Studio
Для улучшения читабельности кода я использую выделение цветом синтаксиса для методов в редакторе кода Visual Studio при помощи настройки...

Вынести основную часть кода кода в отдельную функцию - C++
помогите пожалуйста переделать это на функцию... #include <locale.h> #include <conio.h> int main() { setlocale(0,""); float...

Как вытащить часть кода из кода страницы? - C#
Знаю, что можно через json как-то. Вот например есть код страницы, на нем есть несколько одинаковых блоков. Нужно вытащить определенный...

Клиентская часть постоянно зависает при закрытии потока - C#
Всем доброго времени суток! Написал приложение работающее по TCP. Проблема в том, что при закрытии клиентской части постоянно зависает...

Lenovo IdeaPad Z580A (59-348927) при давлении на левую часть зависает и появляются артефакты - Ремонт ноутбуков
Уже как недели две такая проблема появилась: если надавать на левую часть ноутбука, он зависает а на дисплее появляются артефакты в виде...

28
Usaga
Эксперт .NET
2058 / 1717 / 302
Регистрация: 21.01.2016
Сообщений: 6,338
Завершенные тесты: 2
11.01.2017, 11:18 #2
Цитата Сообщение от Leardjiny Посмотреть сообщение
Раньше все работало нормально, может я что-то не так в настройках случайно сделал?
Ну это тебе должно быть видней. Мы тут не телепаты
0
Leardjiny
0 / 0 / 1
Регистрация: 22.09.2013
Сообщений: 145
11.01.2017, 11:21  [ТС] #3
Цитата Сообщение от Usaga Посмотреть сообщение
Ну это тебе должно быть видней. Мы тут не телепаты
Так я потому и спрашиваю - в чем проблема может быть)
Т.к. я вроде ничего и не настраивал, а все что менял - обратно откатил)
0
Usaga
Эксперт .NET
2058 / 1717 / 302
Регистрация: 21.01.2016
Сообщений: 6,338
Завершенные тесты: 2
11.01.2017, 11:23 #4
Leardjiny, очень сложно сказать что-то конкретное по этому поводу.
0
Leardjiny
0 / 0 / 1
Регистрация: 22.09.2013
Сообщений: 145
11.01.2017, 11:32  [ТС] #5
Еще заметил такой момент.
Дебаг в функцию не заходит когда должен, но изредка точка останова срабатывает с каким-то сильным запозданием (я уже писал об этом).

Если посмотреть в это время потоки, то указан почему-то вообще другой поток, чем должен быть. Все остальные функции отображаются в ином потоке, а эта вызывается из них, потому теоретически тоже должна быть в том же потоке.
0
OwenGlendower
Модератор
Эксперт .NET
6968 / 5956 / 2209
Регистрация: 17.03.2014
Сообщений: 11,483
Записей в блоге: 1
11.01.2017, 12:58 #6
Leardjiny, попробуй сделать банальные вещи сначала (если еще не делал): очистить папки bin, obj; папки временных файлов C:\Windows\Temp, %TEMP% и перезагрузи комп. Вдруг поможет
0
Leardjiny
0 / 0 / 1
Регистрация: 22.09.2013
Сообщений: 145
11.01.2017, 15:34  [ТС] #7
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Leardjiny, попробуй сделать банальные вещи сначала (если еще не делал): очистить папки bin, obj; папки временных файлов C:\Windows\Temp, %TEMP% и перезагрузи комп. Вдруг поможет
OwenGlendower, попробовал с папкой TEMP. Все остальное уже делал)) Не помогло... хоть студию переустанавливать.

Добавлено через 1 час 42 минуты
Проверил полностью файлик. Работают все функции класса, кроме одной. Пробовал ее и переименовывать и дублировать. Ситуация повторяется и после переименовывания и при дублировании.

Может с функцией что-то не так?

Это объявление ее в классе:
C++
1
bool        FormModel(int profile_id, float FDDS = 0.0, float FADC = 0.0, float FFPGA = 0.0, float FFRRW = 0.0);
Это ее определение:
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
bool COrwellR_DSP::FormModel(int profile_id, float fdds, float fadc, float ffpga, float ffrrw)
{
    if (profile_id >= kProfilesNumber || profile_id != m_signals[profile_id].profile.id || profile_id <= 0)
    {
        return false;
    }
 
    float cur_fadc, cur_fdds, cur_ffpga, cur_ffrrw;
    if (fdds > 0.0)
        cur_fdds = fdds*1000000;
    else
        cur_fdds = kFrequencyDDS;
 
    if (fadc > 0.0)
        cur_fadc = fadc*1000000;
    else
        cur_fadc = kFrequencyADC;
 
    if (ffpga > 0.0)
        cur_ffpga = ffpga*1000000;
    else
        cur_ffpga = kFrequencyFPGA;
 
    if (ffrrw > 0.0)
        cur_ffrrw = ffrrw*1000000;
    else
        cur_ffrrw = kFrequencyFRRW;
 
    bool            res=false;
    float           signalModelRe[kOrwrMaxRange];
    float           signalModelIm[kOrwrMaxRange];
    float           window[kOrwrMaxRange];
    float           p;
    int32_t         clc_koeff = static_cast<int32_t>(cur_fadc/cur_ffpga);
    int32_t         freq_koeff = static_cast<int32_t>(cur_fdds/cur_fadc);
    //IPP
    IppStatus       r0 = ippStsNoErr, r1 = ippStsNoErr, r2 = ippStsNoErr;
 
    memset(signalModelRe, 0, kOrwrMaxRange*sizeof(float));//zero desired signal 
    memset(signalModelIm, 0, kOrwrMaxRange*sizeof(float));
 
    if (!m_init_ipp)
    {
        m_init_ipp = true;
        //инициализация ipp
        ippStaticInit();
        int32_t fft_size_ln = static_cast<int> ((log10f(static_cast<float>(kFFTmin))/log10f(2.0f))+0.5f);
        for (int i=0; i<kFFTbuffers; ++i,++fft_size_ln)
        {
            r0 = ippsFFTInitAlloc_C_32f(&m_fft_spec[i], fft_size_ln, IPP_FFT_DIV_BY_SQRTN, ippAlgHintAccurate);  //FFT-2048
            r2 = ippsFFTGetBufSize_C_32f(m_fft_spec[i],&m_ipp_buffer_size[i]);
            m_ipp_buffer[i].reset(new char[m_ipp_buffer_size[i]]);
            if ( r2 != ippStsNoErr || r0 != ippStsNoErr   )
            {
                m_init_ipp = false;
            }
        }
    }   
 
    memset(m_modelsRe[profile_id].get(), 0, m_signals[profile_id].fft_size*sizeof(float));//zero desired spectrum 
    memset(m_modelsIm[profile_id].get(), 0, m_signals[profile_id].fft_size*sizeof(float));
    int pulse_length = clc_koeff*(m_signals[profile_id].profile.dds_stop - m_signals[profile_id].profile.dds_start)/m_signals[profile_id].profile.decimation;
    memset(m_window[profile_id].get(), 0, m_windowsize[profile_id]*sizeof(float));
 
    if (pulse_length>m_windowsize[profile_id])
        pulse_length=m_windowsize[profile_id];
    
    const float     blackman1 = 0.42f;
    const float     blackman2 = 0.5f;
    const float     blackman3 = 0.08f;
 
    for( int i = 0; i < m_windowsize[profile_id]; i++)// окно Блэкмана было m_windowsize[profile_id] вместо pulse_length
    {
        m_window[profile_id][i] = (float)(blackman1 - blackman2 * cos ((2. * M_PI * i) / (m_windowsize[profile_id]-1)) + blackman3 * cos ((4. * M_PI * i) / (m_windowsize[profile_id]-1)));
    }
 
    if ( pulse_length > 0 && pulse_length <= sfera_structures::kModelSize)
    {
        if (m_signals[profile_id].profile.dftw == 0)
        {
            //////////////////////////////////////////////////////////////////////////
            //КИ
            for (int i=0,k=0; i< pulse_length; ++i)
            {
                if ( (i%m_signals[profile_id].profile.decimation)==0 )
                {
                    p=(float)(2.f*M_PI*i*m_signals[profile_id].profile.ftw/(float)(powf(2.f,31.f)));
                    signalModelRe[k]= (float)cos(p);
                    signalModelIm[k]= (float)sin(p);
                    ++k;
                }
            }
        }
        else
        {
            //////////////////////////////////////////////////////////////////////////
            //LFM
            uint32_t pw = 0; 
            uint32_t dfw = m_signals[profile_id].profile.dftw;
            uint32_t ftw = m_signals[profile_id].profile.ftw;
            uint32_t fw = ftw;
 
            for( int i = 0; i < pulse_length; i++)// окно Блэкмана
            {
                window[i] = (float)(blackman1 - blackman2 * cos ((2. * M_PI * i) / (pulse_length-1)) + blackman3 * cos ((4. * M_PI * i) / (pulse_length-1)));
            }
 
            uint32_t step =  static_cast<int>((m_signals[profile_id].profile.dfrrw*cur_fadc/cur_ffrrw)+0.5f);
            if (step == 0 )
            {
                return false;
            }
            for (int i=0,k=0; i< pulse_length; ++i)
            {
                p=(float)(pw>>1);
                p=(float)(p*2*M_PI/(float)(pow(2.,31.)));
                if ( (i%m_signals[profile_id].profile.decimation)==0 )
                {
                    if ( m_window_target == 1)
                    {
                        signalModelRe[k]= window[i]*(float)cos(p);
                        signalModelIm[k]= window[i]*(float)sin(p);
                    }
                    else
                    {
                        signalModelRe[k]= (float)cos(p);
                        signalModelIm[k]= (float)sin(p);
                    }                   
                    ++k;
                }
                for(int j=0; j<freq_koeff; j++)
                {
                    pw+=fw;
                }
                if (((i+1)%step)==0) 
                {fw+=dfw;}
            }
        }
    } 
    else
    {
        return false;
    }
    
    int32_t buff_num = static_cast<int>( static_cast<int>((log10f(static_cast<float>(m_signals[profile_id].fft_size))/log10f(2.0f))+0.5f)- static_cast<int> ((log10f(static_cast<float>(kFFTmin))/log10f(2.0f))+0.5f));
    
    if ( buff_num < kFFTbuffers)
    {
        //получаем спектр эталона
        r1 = ippsFFTFwd_CToC_32f((const Ipp32f*)signalModelRe,
            (const Ipp32f*)signalModelIm, 
            (Ipp32f*)m_modelsRe[profile_id].get(), 
            (Ipp32f*)m_modelsIm[profile_id].get(),
            m_fft_spec[buff_num], 
            (Ipp8u*)m_ipp_buffer[buff_num].get()); 
        (r1 == ippStsNoErr) ?  res=true : res =false;
    }
    
    return res;
}
Кстати, если после 30 строчки просто добавить какой-нибудь массив из 100000 элементов
C++
1
float qwe[100000];
просто объявить и ничего с ним не делать.
То как только доходит до этой функции - вылетает ошибка о нарушении памяти (как будто вылез за пределы массива и т п).

При этом больше ничего не меняется. Такого я как то не понимаю уже(
0
nd2
2322 / 1907 / 671
Регистрация: 29.01.2016
Сообщений: 6,227
12.01.2017, 01:29 #8
Возможно, UB в коде присутствует. Может, где-то в функции, за пределы выделенной памяти выходишь.
0
Leardjiny
0 / 0 / 1
Регистрация: 22.09.2013
Сообщений: 145
12.01.2017, 08:40  [ТС] #9
Цитата Сообщение от nd2 Посмотреть сообщение
Возможно, UB в коде присутствует. Может, где-то в функции, за пределы выделенной памяти выходишь
А почему это всегда работает, и проявляется только при выделении памяти под массив в 100к элементов? Я же по сути только память выделил, а больше ничего и не менял. В моем представлении это вообще не должно было повлиять никак, только объем выделяемой памяти больше стал и все.
0
Usaga
Эксперт .NET
2058 / 1717 / 302
Регистрация: 21.01.2016
Сообщений: 6,338
Завершенные тесты: 2
12.01.2017, 08:47 #10
Цитата Сообщение от Leardjiny Посмотреть сообщение
проявляется только при выделении памяти под массив в 100к элементов?
Так, а где ты такой массив выделяешь? В стёке? Ты же знаешь, что он не резиновый?
0
Leardjiny
0 / 0 / 1
Регистрация: 22.09.2013
Сообщений: 145
12.01.2017, 09:38  [ТС] #11
Usaga, Знаю, но 100 тысяч элементов float - это не так уж и много.
Да и вот тут я выделяю на каждый массив более 100к элементов. И все работало (ставил и больше), как только вылезла эта ошибка - он мне теперь не позволяет увеличивать эти массивы.
C++
1
2
3
float           signalModelRe[kOrwrMaxRange];
    float           signalModelIm[kOrwrMaxRange];
    float           window[kOrwrMaxRange];
В целом суть не в этом. Мне бы дебаг починить, чтобы эту функцию можно было отлаживать. А с размерами и выходом за пределы я уже разберусь.
0
Usaga
Эксперт .NET
2058 / 1717 / 302
Регистрация: 21.01.2016
Сообщений: 6,338
Завершенные тесты: 2
12.01.2017, 10:05 #12
Leardjiny, проблемы с дебагом могут быть связаны с UB в твоём коде.

Цитата Сообщение от Leardjiny Посмотреть сообщение
но 100 тысяч элементов float - это не так уж и много.
При этом ты должен точно знать, сколько места в стёке свободно. А на эту информацию полагаться нельзя.

Цитата Сообщение от Leardjiny Посмотреть сообщение
Да и вот тут я выделяю на каждый массив более 100к элементов. И все работало (ставил и больше),
Не надо так. Ты не можешь знать сколько в данный момент в стёке места. Выделяй такие большие массивы данных только в куче и проблем не будет. По крайней мере таких, как та с которой ты сейчас паришься.
0
Leardjiny
0 / 0 / 1
Регистрация: 22.09.2013
Сообщений: 145
12.01.2017, 10:15  [ТС] #13
Usaga, Предлагаете через malloc выделять память для буфферов?
Я конечно сейчас попробую. Но я пробовал размеры буфферов уменьшать до маленьких размеров - проблема все равно остается (дебаг не заходит).
0
Usaga
Эксперт .NET
2058 / 1717 / 302
Регистрация: 21.01.2016
Сообщений: 6,338
Завершенные тесты: 2
12.01.2017, 10:31 #14
Leardjiny, предлагаю использовать new и delete. Или smart pointers, но в данном случае это излишне.

Добавлено через 1 минуту
Просто стёк не такой большой, чтобы в него большие массивы заталкивать безнаказанно.
0
Leardjiny
0 / 0 / 1
Регистрация: 22.09.2013
Сообщений: 145
12.01.2017, 11:09  [ТС] #15
Usaga, Спасибо. Так он разрешил выделить больше размера для массивов.
Где-то есть пробел у меня, мне казалось что компилятор должен при сборке считать - сколько ему памяти для стека понадобится. Поищу литературу.

Теперь буду с ошибкой при заходе дебагом в функцию разбираться, а потом с выходом за пределы буффера.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2017, 11:09
Привет! Вот еще темы с ответами:

Отключить часть кода - HTML, CSS
Как в HTML отключить часть кода, при помощи CSS ? Аналог тегу&lt;!-- --&gt;.

Объяснить часть кода - C (СИ)
NotBegin = 0; //Вывод результата в виде строки. for(i = MaxLength; i &gt;= 0; i--) { if(Ttek) { ...

Прокомментировать часть кода - Java SE
Прокоментируйте вот этот код, чего не очень ясен. String consoleEncoding = System.getProperty(&quot;consoleEncoding&quot;); if...

Не отображается часть кода - PHP
Есть код &lt;? include ('../../php/start_session.php'); include ('../../php/auth_db.php'); include ('../../php/auth.php'); ...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
12.01.2017, 11:09
Ответ Создать тему
Опции темы

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