Как посмотреть значение переменной в visual studio
Перейти к содержимому

Как посмотреть значение переменной в visual studio

  • автор:

Как просмотреть значение переменной в cshtml при отладке Visual Studio?

Отладка JavaScript-кода внутри cshtml -страницы в среде разработки Visual Studio, насколько мне известно, недоступна. Вы можете поставить Breakpoint на элемент Razor-разметки — там точка останова сработает. И чтобы увидеть значение переменной — Вам необходимо, чтобы Ваш код был активен именно в том месте, где Вы этого хотите. Иными словами, если хотите увидеть в JavaScript-коде, нужно чтобы он в данный момент выполнялся и там была к примеру точка останова.

Для отладки JavaScript-кода на странице, лично я пользуюсь разными подходами. Первые два подхода — с использованием браузера.

1. Использование ключевого слова debugger

Пишем в JavaScript-коде вот такую строку:

debugger; var name = $('#input_price').val(); 

Пишем эту строку там, где хотим остановиться.

Выражение debugger открывает доступ к любому доступному в конкретном окружении отладочному функционалу, например к установке точек останова (т.н. брейкпоинтов).

Чтобы брейкпоинт сработал (выполнилась приостановка) — нужно открыть исходный код текущей страницы в браузере (к примеру в Google Chrome это пункт Просмотреть код )

2. Использование console.log

Использовать можно в качестве отладочной информации и для дальнейшей инспекции и отладки кода. Довольно-таки банальный способ, но очень действенный. К примеру, я хочу посмотреть, что было в переменной, по Вашему коду:

var name = $('#input_price').val(); console.log(name); 

Метод console.log — выводит сообщения в веб-консоль. На подобии предыдущего пункта открываем Просмотреть код , идем на вкладку Console — и видим, что у нас было в переменной name . Просто и действенно. Ну и наконец перейдем к тому, что Вам должно помочь.

3. Перенос JavaScript-кода из .cshtml в отдельный файл .js

Как я сказал в начале: отлаживать Razor на странице внутри Visual Studio — пожалуйста, но не JavaScript. Выносим функционал JavaScript-кода в отдельный файл (к примеру MyCshtml.js ), помещаем его в папку ( Scripts к примеру), где-то рядышком, и подключаем на странице как-то так:

После этой не хитрой манипуляции точки останова в среде разработки должны заработать и Вы сможете увидеть, что у Вас находится в той или иной переменной в Вашем JavaScript-коде в момент отладки определенного кода. Причем сайт нужно открывать в браузере Internet Explorer, именно он дружит с Visual Studio, так как оба продукта от Microsoft.

4. Visual Studio 2017 в паре с Internet Explorer 11 и debugger

Пожалуй, самый банальный способ, как показала практика рассуждений с @Grundy — это использование ключевого слова debugger внутри JavaScript-кода cshtml -страницы.

  • Выбираем браузер по умолчанию для открытия нашего сайта Internet Explorer.
  • Открываем сайт в IE и переходим в Настройки -> Свойства браузера — вкладка Дополнительно — раздел Обзор , убираем галочку напротив строки: Отключить отладку сценариев (Internet Explorer) , жмем Применить , а затем ОК

После этого точки остановки в месте ключевого слова debugger срабатывают внутри среды разработки Visual Studio 2017.

Проверил на VS2017 в паре с IE11 в операционной системе Windows 10.

Использование отладчика в Visual C++

Встроенный отладчик Visual C++ — очень мощный и удобный инструмент, оказывающий неоценимую помощь в процессе поиска и устранения ошибок в программе. В этой статье я постараюсь продемонстрировать его возможности и показать, как использовать их на практике.

Запуск и прекращение отладки

Для того чтобы вы могли контролировать выполнение программы и наблюдать её состояние, нужно запустить её под управлением отладчика Visual C++. Для этой цели используются команды из меню Build->Start Debug. Первые три из них (Go, Step Into и Run to Cursor) аналогичны одноимённым командам, доступным в процессе отладки. Мы рассмотрим их немного позже. Более интересна команда Attach to Process, которая позволяет подключить отладчик к любому уже запущенному процессу. Например, если написанная вами программа вдруг «зависла», можно тут же подключиться к ней и выяснить причину ошибки. Вы можете даже подключиться к оболочке Windows (explorer.exe) и попытаться повыполнять её в пошаговом режиме. Правда, в этом случае вам придётся работать с текстом программы на языке ассемблера, так как Микрософт не поставляет исходные тексты своей оболочки.

Текущий сеанс отладки можно прекратить в любой момент, вызвав команду Stop Debugging из меню Debug или нажав Shift+F5. Кроме того, сеанс отладки автоматически заканчивается, когда завершается программа.

Точки останова (Breakpoints)

Точка останова — это по сути некоторое условие, при выполнении которого отладчик прерывает выполнение программы. Таким условием может быть достижение некоторой команды в вашей программе, изменение глобальной переменной, приход заданного сообщения Windows и т. п. После того, как программа прервана в нужном месте, вы сможете выполнять её в пошаговом режиме, анализировать текущие значения переменных и даже вносить в программу изменения прямо «на лету», не прерывая сеанса отладки. Очень важно прервать программу именно в том месте, где она работает некорректно. Для этой цели и нужны точки останова.

ПРИМЕЧАНИЕ
Самый простой способ прервать программу — вызвать команду Break из меню Debug (ей соответствует команда Break Execution на панели инструментов). Иногда это бывает удобно. Например, если ваша программа вошла в бесконечный цикл, можно прервать её и посмотреть, почему это произошло. Однако в большинстве случаев такой способ недостаточно точен, и вместо него используются точки останова.

В простейшем случае точка останова жёстко привязывается к строке в вашей программе. Такую точку останова можно установить прямо в редакторе кода. Для этого нужно поместить курсор на нужной строчке и вызвать команду Insert/Remove Breakpoint (или нажать F9). Для удаления точки останова используется та же команда. Однако гораздо больше возможностей предоставляет окно Breakpoints из меню Edit. В нижней части этого окна находится список уже поставленных точек останова (любую из них можно активизировать, отключить или удалить), а вверху расположены три вкладки, предназначенные для установки точек останова различных типов.

Вкладка Location

Здесь настраиваются точки останова, привязанные к конкретным строкам в вашей программе. Адрес точки останова показывается в поле Break at в виде

 @номер_строки

Для формирования адреса можно воспользоваться окном Advanced breakpoint; чтобы вызвать это окно, щелкните на стрелке справа от поля ввода и выберите пункт Advanced. Обычно достаточно задать только номер строки и имя файла с исходным кодом.

В окне Condition можно дополнительно указать условие срабатывания точки останова. Условием может быть любое выражение. Если заданное вами выражение имеет тип bool, точка останова срабатывает, когда оно истинно; в противном случае она срабатывает при изменении значения выражения.

Бывают случаи, когда точку останова нужно пропустить несколько раз, прежде чем прерывать на ней программу. Специально для этого в окне Condition предусмотрено ещё одно поле Skip count (в самом низу). С помощью этого поля можно, к примеру, пропустить 10 итераций цикла и прервать программу только на одиннадцатой.

Вкладка Data

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

Если выражение имеет смысл только в определённом контексте (например, в нём используются локальные переменные какой-либо функции), этот контекст необходимо указать с помощью всё того же окна Advanced breakpoint, но здесь уже важно указать имя функции, а не файла.

Visual C++ позволяет вам контролировать изменение не только отдельных переменных, но и массивов. Рассмотрим следующий фрагмент программы.

int main(int argc, char* argv[]) < . int array[10]; for(int i=0; i10; i++) array[i] = 0; . >

Если теперь задать на вкладке Data точку останова в виде ‘ array’ , то программа будет прерываться каждый раз, когда хоть один элемент массива array меняет своё значение (в нашем примере — на каждой итерации цикла).

Можно также контролировать не целый массив, а только некоторую его часть. Для этого на вкладке Data имеется поле ввода «Enter the number of elements to watch in an array or structure». В этом поле задаётся количество элементов массива, которое нужно контролировать. Отсчёт ведётся от элемента массива, к которому вы обращаетесь в выражении (по индексу или указателю).

Вернёмся к нашему примеру. Чтобы отслеживать изменения в первых трёх элементах массива array, нужно задать для точки останова выражение ‘ array[0]’ или ‘ *array’ . Чтобы реагировать на изменения в элементах с четвёртого по шестой, нужно задать ‘ array[3]’ или ‘ *(array+3)’ . И в том, и в другом случае нужно задать количество контролируемых элементов — три.

Если вам потребуется отслеживать изменения в нескольких несвязханных между собой промежутках массива, придётся завести по одной точке останова на каждый промежуток.

Вкладка Messages

На этой вкладке устанавливаются точки останова на сообщения. В верхнем поле указывается имя функции окна, а в нижнем – сообщение, приход которого в эту функцию должен привести к прерыванию программы. Обратите внимание, что функция окна должна иметь стандартный прототип:

LRESULT WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);

Обычно, точки останова на сообщения используются в программах, написанных с использованием «чистого» Win32 API. В программах, использующих MFC, удобнее ставить точки останова в соответствующие обработчики сообщений.

Пошаговая отладка

После того, как программа прервана, её можно выполнять в пошаговом режиме. Для этого в отладчике предусмотрены следующие команды (из меню Debug).

Команда Описание
Go (F5) Продолжить выполнение программы до следующей точки останова
Step Into (F11) Выполнить одну инструкцию. Если это вызов функции, точка выполнения перемещается на первую строчку этой функции (то есть происходит «заход» в функцию).
Step Over (F10) Выполнить одну инструкцию. Если это вызов функции, то она выполняется целиком (то есть «захода» в функцию не происходит).
Step Out (Shift+F11) Выполнять программу до возврата из текущей функции.
Run to Cursor (Ctrl+F10) Выполнять программу до инструкции, на которой находится курсор ввода. Эта команда эквивалентна установке временной точки останова с последующим вызовом команды Go.

Иногда в процессе отладки возникает необходимость перенести точку выполнения. Например, вы заметили ошибку и хотите «перескочить» через неё или, наоборот, хотите вернуться немного назад и выполнить фрагмент программы ещё раз. Чтобы это сделать, установите курсор в нужном месте и выберите команду Set Next Statement из контекстного меню (или нажмите Ctrl+Shift+F10).

Окна отладчика

В процессе пошаговой отладки программист может использовать целый ряд специальных окон отладчика для наблюдения за состоянием программы. Каждому окну соответствует кнопка на панели инструментов Debug, с помощью которой можно показывать и прятать соответствующее окно. Назначение всех отладочных окон описано в последующих разделах.

Окно Variables

В этом окне автоматически отображаются значения локальных переменных (вкладка Locals), переменных-членов класса, адресуемого указателем this (вкладка This), а также всех переменных, которые используются в предыдущей и текущей строках программы (вкладка Auto). На вкладке Auto также показываются возвращаемые значения функций.

Чтобы изменить значение переменной, показанной в окне Variables, нужно просто два раза кликнуть на старом значении и ввести новое.

Чтобы узнать тип любой переменной, нужно щёлкнуть по ней правой кнопкой и выбрать Properties из всплывающего меню.

Выпадающий список Context позволяет просматривать локальные переменные любой из вызванных в данный момент функций. Кроме того, код выбранной в нём функции автоматически отображается в окне редактора.

Если в вашей программе используются строки в формате UNICODE, но их содержимое не отображается в окне Variables, вызовите окно Tools->Options и установите флажок «Display unicode strings» на вкладке Debug.

Вы, вероятно, заметили, что отладчик «умеет» распознавать стандартные структуры данных (CString, RECT и т. п.) и показывать их содержимое в удобном виде. Оказывается, можно не только изменить представление этих структур в окне Variables, но и определить представление для собственных структур. Для этого нужно отредактировать файл autoexp.dat, расположенный в каталоге %Visual Studio Folder%\Common\MSDev98\Bin. Полное описание формата этого файла содержится в самом файле (в виде комментария). Рассмотрим его основние элементы.

Каждая строка в файле autoexp.dat (за исключение комментариев, которые начинаются со знака «;») описывает одну структуру (или класс). Описание имеет следующую структуру:

имя_структуры = текст

Текст может быть совершенно любым. Чтобы вставить в него значение поля структуры, используется конструкция

Ключ форматирования является необязательным параметром. Список возможных ключей приводится в файле autoexp.dat, и здесь я его воспроизводить не буду. Замечу только, что практически все ключи совпадают с соответствующими форматными символами функции printf .

Окно Watch

Окно Watch позволяет просматривать значения переменных и выражений. Переменные и выражения можно размещать на любой из четырёх вкладок. Добавить переменную или выражение в окно Watch можно одним из следующих способов:

  • Ввести с клавиатуры.
  • Перетащить из окна редактора (для этого нужно предварительно выделить нужную переменную или выражение) или из окна Variables.
  • Добавить из окна Quick watch.

Чтобы изменить значение переменной, достаточно два раза кликнуть на старом значении и ввести новое. Значение выражений изменять нельзя.

Чтобы узнать тип переменной или выражения, нужно щёлкнуть по ним правой кнопкой и выбрать Properties из всплывающего меню.

В окне Watch можно наблюдать любые регистры процессора и изменять их значения, хотя это удобнее делать в окне Registers. Можно также использовать регистры в выражениях.

Флаги форматирования

Можно указать отладчику, в каком формате выводить значение переменной/выражения, используя флаги форматирования. Эти флаги добавляются к имени переменной или выражению через запятую. Большинство из них совпадает с символами форматирования функции printf: d – целое число со знаком, u – беззнаковое целое, f – число с плавающей точкой, c – символ, s – строка и т. д. Полный список флагов приведн в таблице.

Флаг Описание
d, i целое со знаком
u беззнаковое целое
o беззнаковое восьмеричное целое
x, X беззнаковое шестнадцатеричное целое
l, h «длинное» или «короткое» целое (префиксы, используемые совместно с флагами d, i, u, o, x, X
f вещественное число со знаком
e вещественное число со знаком в научной нотации
g вещественное число со знаком (нотация выбирается автоматически)
c символ
s строка в кодировке ANSI
su строка в кодировке Unicode
st строка (кодировка зависит от настройки «Display unicode strings»)
hr HRESULT или код ошибки Win32
wc флаг класса окна
wm код сообщения
количество элементов массива

Назначение большинства флагов вопросов не вызывает, но последние четыре флага следует рассмотреть подробнее.

Флаг wm превращает код сообщения в его название, например:

0x01,wm = WM_CREATE

Флаг wc позволяет «расшифровать» стиль окна, например:

0x6840000,wc = WS_OVERLAPPEDWINDOW WS_CLIPSIBLINGS WS_CLIPCHILDREN

Флаг hr переводит коды ошибок Win32 и значения HRESULT, возвращаемые функциями COM, в удобочитаемый вид, например:

0x02,hr = 0x00000002 Системе не удается найти указанный файл.

Наконец, числовой флаг позволяет просмотреть заданное количество элементов массива, адресуемого указателем (по умолчанию показывается всего один элемент). Допустим, мы выделили динамический массив из 10 целых чисел:

int *pInt = new int[10];

Чтобы просмотреть его содержимое в окне Watch, нужно ввести:

pInt,10
Псевдорегистр ERR

Как известно, получить расширенный код ошибки после вызова функций Win32 API можно с помощью GetLastError. Однако расставлять по всей программе вызовы GetLastError крайне неудобно. Поэтому в отладчике Visual C++ предусмотрен специальный псевдорегистр ERR, который всегда содержит расширенный код ошибки. Особенно удобно наблюдать значение этого регистра, использую уже знакомый нам флаг hr. Добавьте ERR,hr в окно Watch, и информация об ошибках в вызовах функций API всегда будет у вас перед глазами.

Окно Registers

Окно Registers позволяет просматривать и изменять значения регистров процессора. В нём также отображаются все флаги и содержимое стека. Любое значение в окне можно изменить. Для этого нужно переместить курсор ввода в нужное место и просто ввести новое значение поверх старого.

Команда Floating Point Registers из контекстного меню позволяет включить или выключить отображение регистров с плавающей точкой.

Окно Memory

Окно Memory позволяет посматривать и изменять содержимое ячеек памяти. Содержимое памяти может отображаться в самых разных форматах. Из контекстного меню можно выбрать Byte Format (отдельные байты), Short Hex Format (слова в шестнадцатеричном виде) и Long Hex Format (двойные слова в шестнадцатиричном виде). Полный список форматов для окна Memory доступен в окне Tools->Options на вкладке Debug (выпадающий список Format).

Значение любой ячейки памяти можно изменить. Для этого нужно переместить курсор ввода в нужное место и просто ввести новое значение поверх старого. Кроме того, вы можете перетащить в окно Memory любую переменную, и в нём отобразится участок памяти, в котором хранится значение этой переменной.

Окно Call Stack

Окно Call Stack показывает последовательность вызванных функций. Используя контекстное меню, можно отобразить также типы (Parameter Types) и значения (Parameter Values) параметров этих функций. К тексту любой функции можно переместиться, сделав двойной щелчок на её имени. Кроме того, точки останова можно ставить прямо в этом окне.

Окно Disassembly

В этом окне отображается текст отлаживаемой программы на языке ассемблера. Иногда без помощи этого окна ошибку в программе найти не удаётся. Точки останова можно ставить прямо в этом окне. При этом обеспечивается позиционирование с точностью до команды процессора (в окне редактора кода такой точности достичь не удаётся).

Диалоги отладчика

Диалоги отладчика предоставляют вам ряд дополнительных возможностей. Все они вызываются из меню Debug.

Quick Watch

Этот диалог имеет возможности, аналогичные возможностям окна Watch, с той разницей, что в нём можно просматривать только одну переменную за раз. Используется, когда вам не хочется добавлять переменную в окно Watch.

Exceptions

Этот диалог позволяет настроить реакцию отладчика на возникновение системных и пользовательских исключений. Для каждого исключения можно выбрать действие Stop always (останавливаться всегда) или Stop if not handled (останавливаться, если исключение не обработано).

Threads

Этот диалог показывает список потоков, созданных вашей программой. Позволяет приостановить (suspend) или продолжить (resume) любой поток, а также установить на него фокус.

Modules

Этот диалог показывает список загруженных модулей. Для каждого модуля выводится диапазон адресов и имя файла.

Edit and Continue

В заключение расскажу о мощной возможности, которая впервые появилась в Visual C++ 6.0 — Edit and Continue. С её помощью вы можете вносить изменения в код программы и перестраивать её, не прерывая сеанса отладки.

Для этого достаточно вызвать команду Apply code changes из меню Debug (или нажать Alt+F10), после того как вы подправили исходные тексты. Более того, Visual C++ может вызывать для вас эту команду автоматически. Это будет происходить, если в окне Tools->Options на вкладке Debug установить флаг Debug commands invoke Edit and Continue.

Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.

Отладка кода в Visual Studio

Для отладки определенной веб-страницы в Visual Studio выберите эту веб-страницу в окне Solution Explorer и щелкните на кнопке Start Debugging (Начать отладку) в панели инструментов. (Если вы в данный момент редактируете веб-страницу, которую собираетесь тестировать, то выбирать ее нет необходимости — просто щелкните на кнопке Start Debugging для ее запуска.)

Дальнейшие события зависят от расположения вашего проекта. Если ваш проект хранится на удаленном веб-сервере или локальном виртуальном каталоге IIS, Visual Studio просто запускает браузер по умолчанию и направляет на соответствующий URL.

Если вы использовали приложение файловой системы, Visual Studio запускает свой встроенный веб-сервер на динамически выбранном порту (который предотвращает конфликт с IIS, если он установлен). Затем Visual Studio запускает браузер по умолчанию и передает ему URL, указывающий на локальный веб-сервер. В каждом случае реальная работа — компиляция страницы и создание объектов страницы — передается рабочему процессу ASP NET.

Тестовый сервер запускается только на время работы Visual Studio и принимает запросы исключительно от данного компьютера. После запуска встроенного веб-сервера Visual Studio добавляет в область значков панели задач представляющий его значок. Чтобы получить дополнительную информацию о тестовом сервере или завершить его работу, необходимо дважды щелкнуть на этом значке.

Разделение Visual Studio, веб-сервера и ASP.NET предоставляет несколько интересных возможностей. Например, пока окно браузера открыто, можно по-прежнему вносить изменения в код и HTML-дескрипторы веб-страниц. Завершив внесение изменений, сохраните страницу и щелкните на кнопке Refresh (Обновить) в браузере для ее повторного запроса. Хотя всегда требуется перезапуск всей страницы для просмотра результатов внесенных изменений, это более удобно, нежели повторная сборка целиком всего проекта.

Фиксация и перезапуск веб-страницы полезны, но что делать, когда необходимо отследить трудно уловимую ошибку? В этих случаях понадобятся усовершенствованные возможности отладки Visual Studio, которые рассматриваются в последующих разделах.

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

Пошаговая отладка

позволяет выполнять код по одной строке за раз. Выглядит она чрезвычайно просто и подразумевает выполнение следующих действий:

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

Добавление точки останова

Просмотр содержимого переменной в режиме паузы

Если вы поместите курсор над объектом, то сможете просмотреть все его свойства, щелкнув на маленьком знаке «плюс»:

Просмотр свойств объекта в режиме паузы

Перевести программу в режим паузы можно в любой момент, щелкнув на кнопке паузы в панели инструментов или выбрав в меню Debug (Отладка) команду Break All (Остановить все).

Слежение за переменными

В некоторых случаях может понадобиться отслеживать состояние переменной без постоянного переключения в режим паузы. В таких ситуациях более полезными оказываются окна Locals (Локальные), Autos (Автоматические) и Watch (Слежение), которые позволяют отслеживать переменные во всем приложении:

Окна для слежения за переменными

Окно Описание
Locals Автоматически отображает все переменные в пределах текущей процедуры, предлагая быстрый обзор важных переменных
Autos Автоматически отображает переменные, которые система Visual Studio определила как важные для текущего оператора в коде. Сюда могут входить, например, переменные, к которым получается доступ или которые изменяются в предыдущей строке
Watch Отображает добавленные вами переменные. Установки слежения сохраняются вместе с проектом, чтобы можно было продолжить слежение за переменными позже. Для добавления слежения щелкните правой кнопкой мыши на переменной в коде и выберите в контекстном меню пункт Add Watch (Добавить слежение); в качестве альтернативы дважды щелкните на последней строке в окне Watch и введите имя переменной

Каждая строка в окнах Locals, Autos и Watch предоставляет информацию о типе или классе переменной и ее текущем значении. Если переменная содержит экземпляр объекта, ее можно развернуть и просмотреть приватные члены и свойства.

Например, в окне Locals вы увидите переменную this, которая является ссылкой на текущий объект страницы. Если вы щелкнете на знаке «плюс» возле нее, появится полный список свойств страницы (и некоторые системные значения):

Просмотр текущего объекта страницы в окне Locals

Окна Locals, Autos и Watch позволяют изменять переменные или свойства во время нахождения программы в режиме паузы. Дважды щелкните на текущем значении в столбце Value (Значение) и введите новое значение. Если не хватает какого-то окна слежения, отобразите его вручную, выбрав его в подменю Windows меню Debug.

Расширенные точки останова

Выберите в меню Debug (Отладка) команду Windows —> Breakpoints для отображения окна, в котором перечислены все точки останова в текущем проекте. Окно Breakpoints (Точки останова) предоставляет счетчик попаданий в точку останова. Дважды щелкнув на точке останова, можно переместиться в соответствующее место кода:

Окно Breakpoints

Окно Breakpoints можно также применять для отключения точки останова без ее удаления. Это позволяет сохранить точку останова, чтобы использовать во время тестирования позже. Точки останова автоматически сохраняются в файле решения.

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

Location

Используйте эту опцию, если хотите увидеть точный файл и строку, в которой находится данная точка останова.

Condition

Используйте эту опцию, если хотите настроить выражение и сделать так, чтобы эта точка останова срабатывала только в случае, когда данное выражение будет истинным, или в случае его изменения с момента последнего срабатывания данной точки останова.

Hit Count

Используйте эту опцию, если хотите создать точку останова, которая будет приостанавливать процесс выполнения только либо после определенного количества срабатываний (например, хотя бы после 20), либо через определенное количество срабатываний (например, через каждые 5).

Filter

Используйте эту опцию, если хотите включить точку останова только для конкретных процессов или потоков. В ASP.NET эта опция применяется редко, поскольку весь код веб-страниц выполняется рабочим процессом ASP.NET, а он использует пул потоков.

When Hit

Используйте эту опцию, если хотите настроить действие, которое должно автоматически выполняться при каждом срабатывании точки останова. Существует два удобных варианта. Первый — указать в качестве такого действия вывод сообщения в окне Debug (Отладка), что позволит следить за ходом выполнения кода без его загромождения операторами Debug.Write(). Такой прием называется созданием точек трассировки (tracepoint).

Второй вариант — указать в качестве такого действия запуск макроса Visual Studio, что позволит выполнить в IDE-среде практически любое действие.

При отладке не удается получить значения переменных в Visual Studio

В процессе отладки серверного кода бизнес процесса столкнулся с проблемой, уже ранее описанной в теме https://community.terrasoft.ua/taxonomy/term/7738. Хотелось бы понять, для версии 7.13 возможно ли каким либо образом решить проблему просмотра переменных в режиме дебага без ошибки Cannot obtain value of the local variable or argument because it is not available at this instruction pointer, possibly because it has been optimized away, либо это невозможно. Дело в том, что невозможность посмотреть значение переменных замедляет разработку.

Так же не везде удается установить breakpoints. Возможно эти проблемы связаны между собой.

1. Заново выполнить Attach to Process.

2. Установка Suppress JIT optimization on module load в настройках дебага.

3. В Build проекта снята галка Optimize code и Debugging information = Full

5 комментариев
27 мая 2019 18:20

Вам необходимо в Options-Debugging-General также отключить флаг Enable Just My Code.

27 мая 2019 23:08

Илья,

Спасибо за ответ,

Однако, даже с отключенным флагом я могу установить breakpoints не везде, так же могу посмотреть значения только некоторых переменных.

12 февраля 2020 11:49

Alex, добрый день! Скажите, пожалуйста, смогли ли Вы справиться с проблемой? После обновления с 7.12 до 7.15 столкнулся с тем же самым, ничего не помогает

14 февраля 2020 17:21

Вот более свежий случай, причём от него же. Судя по молчанию автора, он таки решил свой вопрос или нашёл какой-то обходной способ.

17 февраля 2020 14:37

Иван Небеддаг,

Да, справиться удалось.

Я отказался от работы с Workspace. Enable Just My Code у меня включена. Конфигурационный проект содержит только разрешенные assemblies, например Terrasoft.Common, Terrasoft.Core и тд.

Алгоритм работы, при котором работает отладка у меня:

1. Если есть изменения в гите, то забрать их, это действие обновит часть содержимого из папки Pkg. Далее в конфигурации забрать изменения из файловой системы, компилировать измененное. Если изменений нет, то не нужно.

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

3. Написать в студии логику, нажать на сохранить все.

4. Нажать на компилировать измененное в конфигураторе.

5. Подключиться дебаггером к процессу IIS, установить точки останова.

6. Нажать на компилировать измененное в конфигураторе. По завершении компиляции в студии будут прогружены необходимые для дебага файлы, после чего точки останова станут активны. При отладке, так же будут видны значения переменных и тд.

Нашел баг, при котором на измененной логике точки останова устанавливаются, однако значения переменных смотреть не выходит.

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

Надеюсь, помог. Если не помог, и Ваше решение отличается от моего, напишите его суда, пожалуйста. Для истории будет полезно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *