2010-04-30 4 views
6

Рассмотрят следующий фрагмент кода: my code http://i44.tinypic.com/28hhdw4.jpgСм возвращаемого значения в C#

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

Foo.Bar() - вызов функции, который генерирует уникальный путь (например). Поэтому он НЕ постоянный.

Ввод Foo.Bar() в Immidiate окне не работает, либо, так что переоценивает код:

?Foo.Bar() 
"80857466" 
?Foo.Bar() 
"2146375101" 
?Foo.Bar() 
"1106609407" 
?Foo.Bar() 
"792759112" 

В VB.NET это возможно, введя имя функции в Дозоре, который затем будет угрожать ему как переменной.

Но на C# это невозможно, любые другие советы?

PS: переписывание - это не вариант.

+2

yup .. просто выберите Foo.Bar() и щелкните правой кнопкой мыши по нему и идите для быстрого просмотра. – Malcolm

+0

@Malcolm: быстрый просмотр переоценивает. вы можете получить другой ответ, в зависимости от того, что 'Bar()' делает –

+0

Я согласен с вами, Дэвид, но если он поставит точку останова как cgreeno, как сказано ниже, это будет работать. :) – Malcolm

ответ

3

Ответ здесь: VS get returned value in C# code?

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

+2

Да, но что об объектах? – Snake

+0

Вы правы, не очень помогают объектам. Вы всегда можете заходить в память запросов по адресу, хранящемуся в этом регистре, но это очень просто! Я не могу найти альтернативы, поэтому, думаю, вам придется вернуться к сохранению результата в переменной перед его возвратом. См. Ответы на связанный вопрос SO для ссылки, где вы можете попросить MS сделать что-то по этому поводу. –

+0

Хорошо, спасибо :) – Snake

2

Предполагая, что вы используете визуальную студию, вы можете использовать Immediate window. Если вы наберете Foo.Bar(); в окне Immediate вы получите результат, который вам нужен, если вы не хотите, чтобы он переоценивал точку останова в соответствующем месте IE до того, как он оценил первый раз или сам Foo.Bar().

Смежные вопросы