Получение возвращаемого значения метода в отладчике VS - PullRequest
17 голосов
/ 10 ноября 2009

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

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

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

Ответы [ 8 ]

6 голосов
/ 10 ноября 2009

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

? Foo(valueIn)

Это напечатает возвращаемое значение в Немедленном Окне.

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

5 голосов
/ 10 ноября 2009

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

2 голосов
/ 10 ноября 2009

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

2 голосов
/ 10 ноября 2009

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

1 голос
/ 02 мая 2014

Visual Studio 2013 теперь имеет возможность в окне Autos отображать последнее значение, возвращаемое функцией, что устраняет необходимость повторного выполнения его в окне Output или введения временной переменной:

http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx

0 голосов
/ 18 августа 2017

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

Благодарность Джесперу Дженсену.

0 голосов
/ 12 апреля 2010

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

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

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

0 голосов
/ 10 ноября 2009

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

Foo (valueIn);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...