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

Получение возвращаемого значения метода в отладчике VS

Можно ли получить возвращаемое значение метода в отладчике Visual Studio, даже если это значение не назначено локальной переменной? Например, я отлаживаю следующий код:

public string Foo(int valueIn)
{
    if (valueIn > 100)
        return Proxy.Bar(valueIn);
    else
        return "Not enough";
}

Поскольку я не устанавливаю никаких локальных переменных в Foo и предполагаю, что я не устанавливаю точку останова в любом вызове Foo, есть ли способ увидеть, что такое возвращаемое значение, если у меня есть точка останова внутри Foo ( или другим способом)? У меня нет большого опыта работы с окнами Autos или Intermediate, поэтому я не уверен, что это даже допустимый вариант.

4b9b3361

Ответ 1

Вы можете установить точку останова в Foo, открыть ближайшее окно и запустить следующую команду:

? Foo(valueIn)

Это будет напечатать возвращаемое значение в окне Immediate.

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

Ответ 2

Вы всегда можете переключиться на просмотр дизассемблера и выполнить отдельные инструкции. Возвращаемое значение будет находиться в @eax (или @rax) непосредственно перед выполнением инструкции "ret".

Ответ 3

Нет, я не знаю, как это сделать. Я бы поставил точку останова в вызывающем абоненте и посмотрел на возвращаемое значение.

Ответ 4

Вы также можете выделить любое выражение в отладчике и щелкнуть правой кнопкой мыши → быстрый просмотр. Это выполнит выражение (предположим, что оно действительно) и даст вам значение.

Ответ 6

Вы всегда можете использовать свой блок часов для оценки вызовов функций.

Foo (valueIn);

Это будет работать, только если ваш Proxy.Bar(valueIn) не зависит от времени.

Ответ 7

Обходным путем является использование переменной результата в стиле Паскаля:

public string Foo(int valueIn)
{
    string result;
    if (valueIn > 100)
        result = Proxy.Bar(valueIn);
    else
        result = "Not enough";
    return result;
}

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

Ответ 8

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

Кредит Джеспер Дженсен.