VS получить возвращаемое значение в коде C #? - PullRequest
4 голосов
/ 26 февраля 2009

При отладке кода C / C ++ (неуправляемый?) В VS после выхода из функции вы можете увидеть возвращенное значение в окне 'autos':

альтернативный текст http://img156.imageshack.us/img156/6082/cpp.jpg

Однако, это не работает для кода C #:

альтернативный текст http://img120.imageshack.us/img120/9350/38617355.jpg

Любое предложение о том, как получить возвращаемое значение, кроме как загромождать код временными переменными?

Ответы [ 5 ]

7 голосов
/ 26 февраля 2009

Это на самом деле видно. Отладка + Другие Windows + Регистры. Посмотрите на значение EAX (RAX в x64). Значение простых целочисленных типов возвращается в регистр EAX. Долго в EDX: EAX. Плавающая точка в STx (XMM00 в x64).


Это было трудно реализовать, джиттер определяет, как методы возвращают значение, и разные джиттеры будут делать разные выборы. Особенно, когда тип возвращаемого значения не прост, как структура. Если оно большое, тогда джиттер зарезервирует место в стеке вызывающего метода и передаст указатель на это пространство, чтобы вызываемый метод мог скопировать возвращаемое значение туда. Тем не менее, VS2013 наконец сделал его доступным , доступным в настоящее время в режиме предварительного просмотра. Отображается в окне Autos и с помощью встроенной переменной $ReturnValue в окне Immediate и отслеживает выражения.

6 голосов
/ 26 февраля 2009

К сожалению, загромождение вашего кода временными переменными только в управляемом коде (C # или VB). CLR не поддерживает «управляемые возвращаемые значения» в отладчике и, следовательно, VS также не поддерживает.

В C ++ эта функция немного проще. C ++ может просто захватить регистр или расположение стека последнего возвращаемого значения. Он не должен иметь дело с такими проблемами, как JITer и сборка мусора. И то, и другое сильно усложняет такую ​​функцию, как эта.

Если вам нужна эта функция, я настоятельно рекомендую вам подать запрос на функцию или проголосовать за существующую при подключении

https://connect.microsoft.com/VisualStudio

1 голос
/ 29 июня 2013

Visual Studio 2013 добавил эту возможность в код C # и VB. Пожалуйста, проверьте это в Preview http://www.microsoft.com/visualstudio/eng/2013-preview и сообщите нам свой отзыв.

0 голосов
/ 02 июля 2013

Наконец-то реализовано в VS 2013. Прочитайте длинную историю в блоге VS .

Короче говоря: шаг из или через вызов метода заполняет окно Autos результатом (ами) вызванного метода (ов). Изображения говорят лучше, чем слова:

  1. Начать отладку.
    enter image description here

  2. Перешагните вызов метода (ов).

  3. Profit! Обратите внимание, что отображаются возвращаемые значения all вложенных вызовов методов. Ницца!

    enter image description here

Загрузите VS 2013 Preview , чтобы попробовать сами.

Бонус! 64-битный код Edit-and-Continue также реализован!

0 голосов
/ 26 февраля 2009

Вы можете настроить Main так, чтобы он возвращал int, если вам поможет возвращаемое значение из Main (), но вы не увидите возвращенное значение процедуры test (), как упоминал Джаред. Итак, вам нужно загромождать код, если вы хотите увидеть значения.

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