2010-01-17 2 views
9

Скажем, у меня есть следующийПросмотреть возвращаемое значение?

int num = 40 + str2Int("30");

Есть в любом случае с Visual Studio 2008, чтобы сказать, что str2int возвращается, не наступив в функцию и собирается к возвращению?

+0

Это очевидно из названия самой функции, что она превращающая строку в Int. –

+0

Его пример ... Плюс что, если функция прослушивается и не возвращается 30? Вот почему я спрашиваю об этом. Это боль, чтобы найти ошибки, когда вы вызываете вызовы функций в выражении. – user230821

+1

Что случилось с входом в функцию и просмотром возвращаемого значения? Для этого нужен отладчик. – jamesdlin

ответ

9

В окнах переменных «auto» будет отображаться результат любых операций, которые вы только что преодолели.

Edit: Удалена неопределенность местоположения этого (спасибо идет Майкл Барр)

+0

Святое дерьмо - я не могу поверить, что не знал этого! (это окно «Авто», BTW). Является ли это новым с VS2008 или он существует там годами? –

+0

+1. Я тоже этого не знал. Какая замечательная особенность! – wj32

+0

Прохладный, он показывает «Str2Int возвращен», а затем то, что он вернул. Также как вы выполняете операции? Входите в функцию и переходите через все шаги по всей линии. @ Майкл, он был там надолго. Никогда не замечал разницы между ним и местными жителями до сих пор. – user230821

0
cout << Str2Int("30") << endl; 

Or!

cout << (num - 40) << endl; 
0

Правильный способ программирования - всегда писать небольшие фрагменты кода, чтобы проверить, как все работает. Например, если вы хотите изучить функцию str2int (как пример, как вы сказали), создайте тестовый файл только для него. Запустите его с различными параметрами, изучите, как это работает. Затем вы, наконец, убедитесь, что он работает правильно и не нужно будет входить в него внутри выражений. Когда программисты знакомятся с инструментами, они доверяют им и не нуждаются в том, чтобы всегда проверять, как они работают.

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

+0

* Как только программисты знакомятся с инструментами, они доверяют им и не должны всегда проверять, как они работают. *: -1. Не нужно копаться в этом отношении, он спрашивает, как получить общий вид информации от отладчика. Его использование 'str2int' иллюстрирует, что он * не подозревает библиотеку. – Potatoswatter

+0

@eli - это не всегда значит доверять функции. У вас может быть абсолютно безаварийная, 100% доверенная функция и все еще хочет увидеть, что ее вывод по той простой причине, что вы не знаете, каким будет ее выход. Например, если я не знаю, где указатель файла находится в 'ФАЙЛЕ', я не знаю, что будет возвращать' fgetc() ', но это значение может представлять интерес для меня, пока я отлаживаю , –

2

Вы можете использовать окно Visual Studio Immediate. Это позволит вам оценить различные выражения.

+0

Можете привести пример? Я никогда не смогу заставить выражения работать. – user230821

0

Я не хотел этого, так как я был на PowerPC, и я ничего не использую в Microsoft, но вы, вероятно, хотите, чтобы список регистров и вид кода сборки ... MSVC должен иметь эти.

Остановить команду после вызова функции (что должно быть легко выбрать), и в соответствии с Wikipedia возвращаемое значение должно быть в EAX/RAX. Скопируйте значение (или изучите синтаксис отладчика для ссылки на регистр) и введите в соответствующий тип.

2

Поскольку возвращаемое значение, как правило, находится в регистре EAX, вы устанавливаете $eax «переменную» в окне просмотра. Когда вы переходите через вызов функции, то, что в EAX, это то, что эта функция вернулась.

И если вы также указываете символ формата hr, отладчик покажет вам сообщение об ошибке HRESULT или Win32 (например, «S_OK» или «Доступ запрещен») вместо простого номера. Может быть удобно иметь каждый ($eax и $eax,hr) в отдельных записях.

Еще одна полезная запись $err, который показывает то, что GetLastError() вернется (и символ формата hr могут быть применены к нему - или что-нибудь - а):

$eax 
$eax,hr 
$err 
$err,hr 

Обратите внимание, что старые версии отладчика VS может хотите, чтобы вы использовали @ вместо $, чтобы начать эти переменные, но член команды отладчика заявил, что $ предпочтительнее поддерживать все в соответствии с набором инструментов «Отладка для Windows» (я думаю, что поддержка @ устарел и может быть удален в какой-то момент).

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