Как узнать возвращаемое значение в конце функции при отладке в VS2008? - PullRequest
4 голосов
/ 03 октября 2008

Используя C # в Visual Studio 2008 и пошагово перебирая функцию в отладчике, я дохожу до конца функции и нахожусь на последней фигурной скобке} Есть ли способ узнать, какое значение функция собирается вернуть?

Это необходимо, если рассчитывается возвращаемое значение, например:

return (x.Func() > y.Func());

Ответы [ 5 ]

4 голосов
/ 03 октября 2008

Это немного низкий уровень, но если вы переключитесь на дизассемблирование, то вы можете пошагово выполнить инструкции и посмотреть, какое значение возвращается. Обычно устанавливается в регистре @eax.

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

3 голосов
/ 18 ноября 2011

Я сделал коммерческое расширение для Visual Studio под названием BugAid (в настоящее время находится в бета-версии), которое выполняет именно то, что вы просили.

В вашем примере это покажет вам:

Statement Visualization

То, как это происходит, заключается в том, чтобы обрабатывать ваш код во время его отладки, что позволяет нам получить возвращаемые значения обоих вызовов Func и таким образом сделать вывод, является ли выражение x.Func() > y.Func() истинным или нет.

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

2 голосов
/ 03 октября 2008

Я все еще использую VS 2003 с C ++, так что это может или не может применяться. Если вы используете вкладку «auto» (рядом с вкладками «locals» и «watch»), она сообщит вам возвращаемое значение функции после вашего возврата.

2 голосов
/ 03 октября 2008

Можно поставить

(x.Func() > y.Func())

в окне просмотра, чтобы оценить его и увидеть результат. Если только заявление не является

return ValueChangesAfterEveryCall();

с тобой все будет в порядке.

1 голос
/ 03 октября 2008

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

int sumOfSomething = x.Func();
int pendingSomethings = y.Func();
return (sumOfSomething > pendingSomethings);
...