Я могу узнать возвращаемое значение прежде, чем возвратиться при отладке в Visual Studio?

371
задан Peter Mortensen 15 January 2018 в 12:44
поделиться

9 ответов

Не то, чтобы я знаю о. Обратите внимание, что, если Вы делаете , добавляют переменную, она будет удалена компилятором в сборках конечных версий так или иначе...

Обновление: Эта функциональность была добавлена к VS2013. Вы видите возвращаемые значения в авто окнах или использовании $ReturnValue в окне часов / непосредственном окне.

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

<час>

Обновление для VS2015: шикните! к сожалению, это, кажется, не находится в VS2015 (devenv v14)
Обновление для VS2017: это вернулось. (devenv v15)

259
ответ дан Apfelkuacha 23 November 2019 в 00:04
поделиться

Перетащите выражение возврата в окно часов.

, Например, в перетаскивании оператора

return someTableAdapter.getSomeData();

someTableAdapter.getSomeData()

в окно часов, и Вы будете видеть значение.

можно сделать это для любого выражения.

-1
ответ дан Peter Mortensen 23 November 2019 в 00:04
поделиться

Вы могли попытаться выбрать "someTableAdapter.getSomeData();", щелкнуть правой кнопкой по нему и пойти для Быстрые Часы .

0
ответ дан Peter Mortensen 23 November 2019 в 00:04
поделиться

Открытие Debug в †’ окно Autos получает Вас близко. Это не покажет фактическое возвращаемое значение, но это покажет то, что было оценено в операторе возврата.

1
ответ дан Peter Mortensen 23 November 2019 в 00:04
поделиться

Можно также попросить оценивать значение в промежуточном окне также, если это не устанавливает флаги или другие переменные, но только возвращает что-то.

1
ответ дан Biri 23 November 2019 в 00:04
поделиться

Единственным путем я знаю, должен поместить точку останова в возвратную линию и затем звонить окно Quick Watch и ввести возвращенное выражение:

someTableAdapter.getSomeData();

, Но это только работает, если вызов не изменяет состояние никакого объекта (так как будет второй вызов к тому же методу при возобновлении выполнения).

2
ответ дан Peter Mortensen 23 November 2019 в 00:04
поделиться

Шаг из движения () метод с помощью Shift-F11, и затем в "Авто" окне отладки, которое это покажет возвращаемому значению вызова метода, который просто появился от стека (в этом случае, движение () метод, который является тем, что Вы хотите). Это - поведение в Visual Studio 2005; я не использовал Visual Studio 2008, таким образом, я не знаю, ведет ли это себя тот же путь в той версии.

9
ответ дан LeopardSkinPillBoxHat 23 November 2019 в 00:04
поделиться

Существует много обходных решений, но ни один не кажется удовлетворительным.

, Чтобы заключить John Skeet в кавычки ниже (комментируют теперь удаленный ответ):

Все еще взгляды, неудобные для меня - особенно, если Вы не знаете, в каком возвращаемом значении Вы испытываете необходимость, прежде чем Вы начнете отлаживать. Я действительно не хочу должным быть иметь временную переменную, загромождающую мой код каждый раз, когда я когда-либо возвращаю anything.t

В теории, отладчик мог иметь return - переменная. В конце концов: это - просто переменная на стеке:

unsafe {
  int * sp = stackalloc int[1];
  try {
    return a+b;
  }
  finally {
    Trace.WriteLine("return is " + *(sp+3));
  }
}

Так считают это запросом новых функций для Visual Studio.

5
ответ дан Peter Mortensen 23 November 2019 в 00:04
поделиться

Microsoft Visual C++ делал это, но Visual Studio не делает, AFAIK... :(

2
ответ дан 23 November 2019 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: