Подтвердить что ты не робот

Как получить возвращаемое значение во время отладки?

Я просмотрел SO, но не смог найти ответ, я уверен, что он там...?

Во время отладки, как мне получить значение оператора return, если я ставлю на него точку останова? Мне нравится конденсироваться с одной строкой, так что она выглядит "красивой". Но в настоящее время я этого не делаю, так как не могу понять, как отлаживать возвращаемый результат...?

using (IUnitOfWork context = new EFUnitOfWork())
{
    var repo = new ReportRepository(context);
    return repo.GetProcedureReport(startDate, endDate).ToList();
    //return result.ToList();
}
4b9b3361

Ответ 1

Выберите метод и щелкните правой кнопкой мыши. Выберите "Quickwatch" в меню.

enter image description here

Я предполагаю, что вы не можете поставить точку останова в пределах GetProcedureReport?

Ответ 2

В VS 2013 вы можете добавить переменную $ReturnValue к часам. Он содержит фактическое значение returnvalue из функции.

Ответ 3

Тип отладки возвращаемого значения, который вы пытаетесь, просто невозможно с такими управляемыми языками, как С#. Отладчик С++ предоставляет эту информацию через окно авто, но не управляемые языки.

Основная причина, по которой механизм отладки CLR просто не дает этого значения. Для С#, VB или F #, чтобы обеспечить это, они должны будут переписать каждый оператор return, чтобы различить значение во временное, а затем вернуть временное. Отладка возвращаемого значения может быть достигнута путем всплытия этого временного объекта в отладчике.

var returnTemp = repo.GetProcedureReport(startDate, endDate).ToList();
return returnTemp;

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

Обратите внимание, что VB.Net обеспечивает небольшую степень отладки возвращаемого значения. Я писал о том, как это работает здесь.

http://blogs.msdn.com/b/jaredpar/archive/2011/01/12/why-the-debugging-difference-between-c-and-vb-net-return-values.aspx