Возьмите следующую функцию:
DataTable go() {
return someTableAdapter.getSomeData();
}
Когда я устанавливаю точку останова в этой функции, есть ли возможность проверить возвращаемое значение? go()
напрямую связан с сетью данных на .aspx
странице.
Единственный способ проверить возвращаемую таблицу данных - использовать временную переменную. Однако это немного неудобно. Разве нет другого пути?
Ответы:
Не то, что я знаю из. Обратите внимание , что если вы делаете добавить переменный, она удаляется компилятором в освобождении строит все равно ...
Обновление: эта функциональность была добавлена в VS2013 . Вы можете увидеть возвращаемые значения в окнах autos или использовать
$ReturnValue
в окне watch / немедленное.Значение можно увидеть только сразу после возврата из функции, поэтому самый простой способ получить к нему доступ - это поставить точку останова на вызов функции и перешагнуть (F10) вызов.
Обновление для VS2015: бу! к сожалению, его нет в VS2015 (devenv v14)
Обновление для VS2017: он вернулся. (devenv v15)
источник
Это можно сделать в Visual Studio 2013 с CLR 4.5.1 в соответствии с сайтом отзывов клиентов. . Это не было доступно в предыдущих версиях для C #.
(Visual Studio 2008 и более ранние версии поддерживали его для VB.NET. Он всегда был доступен для разработчиков на C / C ++.)
источник
Я согласен, что это очень полезная вещь: не только видеть возвращаемое значение метода перед тем, как выйти из него, но и видеть возвращаемое значение методов, которые я только что перешагнул. Я реализовал это как часть коммерческого расширения для Visual Studio под названием " OzCode ».
С его помощью вы можете просматривать возвращаемые значения метода прямо в редакторе кода, как своего рода HUD-дисплей:
Для получения дополнительной информации, пожалуйста, смотрите это видео .
источник
Согласно Microsoft, нет способа надежно реализовать это с помощью управляемого кода. Это проблема, о которой они знают и над которой работают:
https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code
источник
Что касается Visual Studio 2015:
Согласно принятому в настоящее время ответу Марка Гравелла:
В этом ответе также говорилось, что эта функциональность не работает в Visual Studio 2015. Это не совсем верно. При проверке возвращаемых значений вызовов методов появляется следующее примечание:
Я проверил это в Visual Studio 2015 Enterprise:
источник
$ReturnValue
работают. Однако возвращаемое значение нигде не появляется, если у васUse managed compatibility mode
включена опция отладки.Если вы перейдете в меню Инструменты → Параметры , IntelliTrace и измените настройку для сбора событий и информации о вызовах.
Вы можете вернуться к предыдущему событию вызова ( Ctrl+ Shift+F11 ) и увидеть временное значение, возвращаемое из вызова метода в окне autos, как дочерний элемент имени метода.
Это не показывает возвращаемое значение для метода, в котором вы находитесь. Это просто показывает возвращаемое значение последнего метода, вызванного в текущем методе.
Итак, это хорошо для
как это показывает вам возвращаемое значение для
someTableAdapter.getSomeData()
.Но не для:
источник
Старый трюк до .NET дней: откройте окно регистров и посмотрите на значение регистра EAX. Содержит возвращаемое значение последней вызванной функции.
источник
Выйдите из метода go () с помощью Shift-F11, а затем в окне отладки «Autos» он покажет возвращаемое значение вызова метода, который только что вытолкнул из стека (в данном случае, метод go (), который является то, что ты хочешь). Это поведение в Visual Studio 2005; Я не использовал Visual Studio 2008, поэтому я не знаю, ведет себя ли это так же в этой версии.
источник
Да, есть очень хороший способ. Одним существенным недостатком является то, что вам придется ждать 5, а может и 6 лет. Так как я вижу, что вы отправили в ноябре 2008 года, я предлагаю вам waaaaaa ...
... aaaait. И вуаля! Только для вас, MS выпустила последнюю версию Visual Studio 2013, где это функция по умолчанию, доступная из меню при работе в режиме отладки (меню Debug → Windows → Autos ).
источник
Есть много обходных путей, но ни один не кажется удовлетворительным.
Процитирую Джона Скита ниже (прокомментируйте удаленный сейчас ответ):
Теоретически, отладчик может иметь-
return
переменную. В конце концов: это просто переменная в стеке:Так что считайте это запросом функции для Visual Studio.
источник
Я хотел бы расширить ответ PascalK за то, чтобы заставить его работать в Visual Studio 2015, потому что есть скрытая функция, которая не документирована в проверке возвращаемых значений вызовов методов .
Если у вас есть вложенные вызовы функций,
$ResultValueX
автоматически создаются псевдопеременные , где X обозначает порядок вызова функций. Поэтому, если у вас есть такой вызовMultiply(Five(), Six())
, создаются следующие псевдопеременные:источник
Microsoft Visual C ++ раньше делал это, но Visual Studio не AFAIK .. :(
источник
Единственный способ, которым я знаю, - это поместить точку останова в строку возврата, а затем вызвать окно Quick Watch и ввести возвращаемое выражение:
Но это работает только в том случае, если вызов не изменяет состояние какого-либо объекта (поскольку будет повторный вызов того же метода, когда вы возобновите выполнение).
источник
Вы также можете попросить оценить значение в промежуточном окне, если оно не устанавливает флаги или другие переменные, а только что-то возвращает.
источник
Я думаю, что вы можете определить это, посмотрев регистр RAX в окне регистров (Debug / Windows / Registers). После выхода (SHIFT + F11) из функции проверьте регистр RAX. Я не знаю точно, но однажды вы могли бы проверить регистр (до .NET дней) и увидеть возвращаемое значение там. Это может быть даже комбинация RAX и RBX и т. Д.
источник
При открытии окна «Отладка → Авто» вы закрываетесь. Он не будет отображать фактическое возвращаемое значение, но он покажет, что было оценено в операторе возврата.
источник
return x + y;
Я имел в виду, что если вы установите точку останова в этой строке, то в вашем окне Debug-Autos отобразятся текущие значения для x и y. Как я уже сказал, это только приблизит тебя. Просто пытаюсь быть полезным. Я не думаю, что это заслуживает отрицательного ответа.Да, переходя на VB.NET. ; P (Вы только что сказали "Visual Studio".;)
Насколько я помню (из Visual Basic через все версии VB.NET), вы можете просто запросить имя функции. Он «функционирует», как локальная переменная, которая неявно объявляется в начале функции, и ее текущее значение также используется в качестве возвращаемого значения всякий раз, когда функция завершается с помощью средств без возврата (то есть
Exit Function
или просто проваливается) и, конечно, когда оператор возврата используется.Это также установлено в выражение оператора возврата. Как и локальная переменная, ее значение может быть проверено в любой точке выполнения внутри функции (в том числе после выполнения оператора return). C # не имеет этого и должен.
Эта небольшая функция VB.NET (плюс
Exit Function
оператор, который она включает - еще одна функция C # не имеет и не должна) очень полезна в форме защитного программирования, которую я практикую, где я всегда инициализирую имя функции значением сбоя / значения по умолчанию как первое утверждение Затем в любой точке сбоя (которая обычно происходит гораздо чаще, чем точки успеха), я могу просто вызватьExit Function
оператор (т.е. без необходимости дублировать выражение сбоя / по умолчанию или даже имя константы / переменной).источник
Принятый ответ не работает должным образом с Visual Studio 2015, но, поместив точку останова на последнюю строку метода и нажав кнопку F10, он поместит все выражения возвращаемого значения в окно локальных объектов.
источник
Вы можете попробовать выбрать
"someTableAdapter.getSomeData();"
, щелкнуть по нему правой кнопкой мыши и перейти к Quick Watch .источник
Перетащите возвращаемое выражение в окно просмотра.
Например, в заявлении
перетащить
в окно просмотра, и вы увидите значение.
Вы можете сделать это для любого выражения.
источник