Leardjiny
1 / 1 / 1
Регистрация: 22.09.2013
Сообщений: 172
|
|
#1 | |
Зависает часть кода - Visual Studio11.01.2017, 09:15. Просмотров 675. Ответов 28
Метки нет Все метки)
(
Добрый день.
У меня Visual Studio 2010, пользуюсь уже давно, но вчера столкнулся с такой проблемой: Есть исходный код, где объявлен класс с функциями и т.д. Во время отладки ставлю в этом файле точки останова и все вроде нормально работает. Но есть функция (в том же самом файле, и из того же самого класса что и остальные), в которой если поставить точку останова, то вместо этого открывается окно с записью "Нет доступных исходных файлов. Не загружена символьная информация ни для одного кадра стека вызовов. Невозможно показать исходный код." При этом все вроде как работает, т.к. результаты функции возвращаются и ошибок нет. Так же иногда после такого сообщения точка останова все же срабатывает (как будто с большим запозданием), но дебаг при этом тормозит - каждая строчка занимает 2-3 секунды почему-то. Странно, что в том же файле и классе остальные функции работают нормально, а такая ситуация лишь с одной функцией. Второй день разбираюсь с проблемой. Загрузку символов Майкрософт уже отключил - не помогло (да и при включенной в код других функций все равно заходило, просто дебаг тормозил все время, а не на одной функции). Подскажите пожалуйста, в чем может быть дело? Раньше все работало нормально, может я что-то не так в настройках случайно сделал?
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
11.01.2017, 09:15 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Зависает часть кода (Visual Studio):
28
Как спрятать большую часть кода - Visual Studio Выделение цветом синтаксиса при отображении кода в редакторе кода Visual Studio - Visual Studio
Как вытащить часть кода из кода страницы? - C# Клиентская часть постоянно зависает при закрытии потока - C# Lenovo IdeaPad Z580A (59-348927) при давлении на левую часть зависает и появляются артефакты - Ремонт ноутбуков |
Leardjiny
1 / 1 / 1
Регистрация: 22.09.2013
Сообщений: 172
|
|
11.01.2017, 11:21 [ТС] | #3 |
Так я потому и спрашиваю - в чем проблема может быть)
Т.к. я вроде ничего и не настраивал, а все что менял - обратно откатил)
0
|
Leardjiny
1 / 1 / 1
Регистрация: 22.09.2013
Сообщений: 172
|
|
11.01.2017, 11:32 [ТС] | #5 |
Еще заметил такой момент.
Дебаг в функцию не заходит когда должен, но изредка точка останова срабатывает с каким-то сильным запозданием (я уже писал об этом). Если посмотреть в это время потоки, то указан почему-то вообще другой поток, чем должен быть. Все остальные функции отображаются в ином потоке, а эта вызывается из них, потому теоретически тоже должна быть в том же потоке.
0
|
OwenGlendower
Модератор
![]() |
|
11.01.2017, 12:58 | #6 |
Leardjiny, попробуй сделать банальные вещи сначала (если еще не делал): очистить папки bin, obj; папки временных файлов C:\Windows\Temp, %TEMP% и перезагрузи комп. Вдруг поможет
![]()
0
|
Leardjiny
1 / 1 / 1
Регистрация: 22.09.2013
Сообщений: 172
|
||||||||||||||||
11.01.2017, 15:34 [ТС] | #7 | |||||||||||||||
OwenGlendower, попробовал с папкой TEMP. Все остальное уже делал)) Не помогло... хоть студию переустанавливать.
Добавлено через 1 час 42 минуты Проверил полностью файлик. Работают все функции класса, кроме одной. Пробовал ее и переименовывать и дублировать. Ситуация повторяется и после переименовывания и при дублировании. Может с функцией что-то не так? Это объявление ее в классе:
То как только доходит до этой функции - вылетает ошибка о нарушении памяти (как будто вылез за пределы массива и т п). При этом больше ничего не меняется. Такого я как то не понимаю уже(
0
|
nd2
2739 / 2309 / 820
Регистрация: 29.01.2016
Сообщений: 7,700
|
|
12.01.2017, 01:29 | #8 |
Возможно, UB в коде присутствует. Может, где-то в функции, за пределы выделенной памяти выходишь.
0
|
Leardjiny
1 / 1 / 1
Регистрация: 22.09.2013
Сообщений: 172
|
|
12.01.2017, 08:40 [ТС] | #9 |
А почему это всегда работает, и проявляется только при выделении памяти под массив в 100к элементов? Я же по сути только память выделил, а больше ничего и не менял. В моем представлении это вообще не должно было повлиять никак, только объем выделяемой памяти больше стал и все.
0
|
Leardjiny
1 / 1 / 1
Регистрация: 22.09.2013
Сообщений: 172
|
||||||
12.01.2017, 09:38 [ТС] | #11 | |||||
Usaga, Знаю, но 100 тысяч элементов float - это не так уж и много.
Да и вот тут я выделяю на каждый массив более 100к элементов. И все работало (ставил и больше), как только вылезла эта ошибка - он мне теперь не позволяет увеличивать эти массивы.
0
|
Usaga
![]() |
|
12.01.2017, 10:05 | #12 |
Leardjiny, проблемы с дебагом могут быть связаны с UB в твоём коде.
При этом ты должен точно знать, сколько места в стёке свободно. А на эту информацию полагаться нельзя. Не надо так. Ты не можешь знать сколько в данный момент в стёке места. Выделяй такие большие массивы данных только в куче и проблем не будет. По крайней мере таких, как та с которой ты сейчас паришься.
0
|
Leardjiny
1 / 1 / 1
Регистрация: 22.09.2013
Сообщений: 172
|
|
12.01.2017, 10:15 [ТС] | #13 |
Usaga, Предлагаете через malloc выделять память для буфферов?
Я конечно сейчас попробую. Но я пробовал размеры буфферов уменьшать до маленьких размеров - проблема все равно остается (дебаг не заходит).
0
|
Usaga
![]() |
|
12.01.2017, 10:31 | #14 |
Leardjiny, предлагаю использовать
new и delete . Или smart pointers, но в данном случае это излишне.Добавлено через 1 минуту Просто стёк не такой большой, чтобы в него большие массивы заталкивать безнаказанно.
0
|
Leardjiny
1 / 1 / 1
Регистрация: 22.09.2013
Сообщений: 172
|
|
12.01.2017, 11:09 [ТС] | #15 |
Usaga, Спасибо. Так он разрешил выделить больше размера для массивов.
Где-то есть пробел у меня, мне казалось что компилятор должен при сборке считать - сколько ему памяти для стека понадобится. Поищу литературу. Теперь буду с ошибкой при заходе дебагом в функцию разбираться, а потом с выходом за пределы буффера.
0
|
12.01.2017, 11:09 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
12.01.2017, 11:09 |
Привет! Вот еще темы с ответами:
15
Отключить часть кода - HTML, CSS
Прокомментировать часть кода - Java SE Не отображается часть кода - PHP Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |