Как увидеть возвращаемое значение метода, которое не сохраняется в отладчике

В Visual Studio 2013, как я могу узнать значение, возвращаемое методом, который нигде не хранится.

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

Пример варианта использования 1:

if(GetEnumResponse() == MyEnums.MyValue)
{
   // Do Stuff
}

Пример варианта использования 2:

var Response = (MyResponse)GetResponse();

В примере 1, если я ожидаю, что условие будет истинным, но оно ложно, как я могу использовать отладчик, чтобы узнать, каков результат GetEnumResponse()?

В примере 2, если приведение вызывает недопустимое исключение приведения, как я могу просмотреть результат GetResponse()?


person CathalMF    schedule 15.12.2015    source источник
comment
@Frédéric - я не думаю, что stackoverflow.com/questions/9375551/debug-return-value дубликат. OP не может видеть источник методов, возвращаемое значение которых они пытаются увидеть, поэтому они не могут установить точку останова при возврате.   -  person ChrisF    schedule 15.12.2015
comment
@ChrisF, согласно эта ссылка из дубликата, спрашивающий должен иметь возможность наблюдать значения, возвращаемые промежуточными функциями, на панели Autos, даже если они не могут разбить операторы return. в самих функциях. Я что-то упускаю?   -  person Frédéric Hamidi    schedule 15.12.2015
comment
@ФредерикХамиди. Хм. Сложный. Сам вопрос не тот, и основная часть решения не помогает, но этот аспект помогает. Не уверен, что это правильное решение.   -  person ChrisF    schedule 15.12.2015
comment
Вы должны посмотреть на OzCode.   -  person Lasse V. Karlsen    schedule 15.12.2015


Ответы (2)


Самое простое решение — изменить способ вызова методов, чтобы поместить возвращаемое значение в локальную переменную, которую вы можете опрашивать.

Дело 1:

var result = GetEnumResponse();
if (result == MyEnums.MyValue)
{
   // Do Stuff
}

Случай 2:

var result = GetResponse();
var Response = (MyResponse)result;

Вы даже можете оставить этот код в рабочей среде, если хотите, поскольку он функционально эквивалентен тому, что у вас есть сейчас.

person ChrisF    schedule 15.12.2015
comment
Да, конечно, это очевидное решение, но в случае отладки огромного проекта. Если я буду вносить такие изменения каждый раз, когда хочу увидеть его значение, мне нужно собрать и развернуть его в моей тестовой среде, что займет около 10 минут моего времени. - person CathalMF; 15.12.2015

Вы можете использовать Immediate (Debug -> Windows -> Immediate) в Visual Studio. Здесь вы можете оценить выражения и увидеть результат.

Возвращаемое значение функции отображается на вкладке Autos, или вы можете использовать $ResultValue в непосредственном окне после возврата функции.

См. пункты 6 и 7 в этом сообщении блога о просмотре возвращаемых функцией значений в отладчике

person AntiHeadshot    schedule 15.12.2015