Visual Studio 2015 Отладка: не удается расширить локальные переменные?
Я использую предварительный просмотр Visual Studio 2015, и я пытаюсь отладить мой проект. Раньше я использовал VS 2012, и в основном зависел от возможности навести курсор мыши и расширить локальные переменные, чтобы посмотреть на их ценности. Я пытаюсь сделать это в 2015 году, но когда я наводил указатель на переменную, в появившемся окне указывается "(локальная переменная) Classname variablename" (например, "(локальная переменная) String title" ). Кнопка расширения отсутствует, и она не отображает значение переменной в поле.
Есть ли параметр, который я должен изменить, чтобы иметь возможность нависнуть над переменными и расширять их?
Ответы
Ответ 1
Это может быть ошибка. Пожалуйста, напишите сообщение об ошибке, если у вас есть его.
Тем временем вы можете решить эту проблему, установив параметры отладчика на использование устаревшего механизма отладки: Инструменты → Параметры → Отладка → Общие: проверьте оба варианта "Использовать устаревшие оценки выражений С# и VB", и "Использовать режим совместимой совместимости".
Этот метод работы работал у меня каждый раз. Но, пожалуйста, продолжайте записывать ошибки!
![Окно параметров]()
Ответ 2
У меня была аналогичная проблема, когда, когда я зависал над своей локальной переменной, некоторые из них позволяли мне погружаться глубже, а некоторые ничего не показывали. После некоторого рытья я нашел статью о msdn здесь: http://bit.ly/1Ir4yFv, которая предложила сбросить настройки в VS. Как только я это сделал, я получил уведомление о том, что я работал в режиме Release и некоторые функции отладки могут быть недоступны. Как только я перешел в режим Debug, все работало, как обычно.
Надеюсь, это сработает и для вас.
Ответ 3
У меня была аналогичная проблема в VS2015, где некоторые переменные отображали значения отладки, другие ничего не отображали бы при зависании.
Включение следующей настройки от Andrew Arnott разрешило мою проблему:
Инструменты → Параметры → Отладка → Общие: "Использовать устаревшие оценщики выражений С# и VB"
Ответ 4
Как описано здесь, вам нужно включить проверку "Подавлять оптимизацию JIT при загрузке модуля (только управляемый)" в Debug → Options → Debugging - → Общие.
Вам нужно также удалить флаг "Оптимизировать код" в свойствах ваших проектов.
Ответ 5
Я обнаружил способ проникнуть в собственный код и получить доступ к содержимому контейнеров STL при отладке с использованием CLI:
Инструменты\Параметры...\Отладка\Общие: снимите флажок "Использовать управляемый режим совместимости" (YES! UNCHECK IT!)
В исходном коде вместо добавления контрольных точек просто добавьте следующее:
утверждают (ложь);
Разбираясь на берег, просто нажмите "Повторить" для отладки или "Игнорировать", чтобы продолжить.
Счастливая отладка с Visual Studio 2015:)
Kochise
Ответ 6
Я обнаружил, что простое изменение combobox с ответом "Отпуск и отладка" для отладки позволило мне увидеть расширение переменных при повторной отладке моего кода.
Это новейшее решение работает на VS 2017 на моем домашнем ПК.
Мой рабочий компьютер смог показать это расширение в 2017 году после того, как я сделал вариант "Построить → Чистое решение", и даже будет работать, если для параметра со списком установлено значение "Отпустить".
Желаем удачи всем, кто хочет эту замечательную форму для отладки VS. Я надеюсь, что, используя один из этих методов, вы сможете вернуться к "нормальному".
Ответ 7
У меня был проект, который использовал мини файлы JavaScript и хотел использовать файлы TypeScript для отладки. Я поместил в проект unminified JavaScript и связанный с ним TypeScript и изменил ссылки на обычный файл JavaScript, а не на мини-код. Мои точки разрыва попали в файл TypeScript, но я не получал информацию о наведении (на удивление это выглядело как добавление объекта/переменной, поскольку часы, похоже, работали).
Чтобы исправить, я просто исключил из файла проект из проекта и включил JavaScript. (Файл TypeScript, который я оставил без исключения).
Ответ 8
Это работало для меня в VS2017 (мой VS находится на немецком языке, поэтому имена вкладок могут быть немного разными):
Проект → Свойства → C/С++ → Генерация кода → RunTimeErrorCheck → \RTC
Также попробуйте отключить опцию оптимизации, поскольку ускорение кода может означать невозможность просмотра значений ваших локальных переменных:
Проект → Свойства → C/С++ → Оптимизация → Отключено
Ответ 9
Я работаю над конфигурацией "Отладка", у которой нет оптимизационного набора, поэтому я повторяю:
Использование управляемой совместимости: может использовать точку останова, но не может просматривать значения
Не использовать управляемую совместимость: нельзя использовать точку останова, но можно просматривать значения
Следовательно, использование assert как точки останова, когда не используется управляемая совместимость, позволяет вам как остановить, где необходимо, так и смотреть значения.
Попробуйте.
Я предоставил вам свой трюк, потому что сейчас я столкнулся с одной и той же проблемой, за 1w до окончательной доставки. И MS претендует на планирование полного исправления для 2016 года в обновлении 2, просто невыносимо.
Кстати, это делает еще один совершенный "разрыв":
int * p = NULL, я = 1/* p;
Kochise