Получение возвращаемого значения метода в отладчике VS

Все числа могут быть выражены как продукт начал, например:

102 = 2 x 3 x 17
712 = 2 x 2 x 2 x 89

можно найти их, просто начав в 2 и просто продолжив делиться, пока результатом не являются несколько из числа:

712 / 2 = 356 .. 356 / 2 = 178 .. 178 / 2 = 89 .. 89 / 89 = 1

использование этого метода Вы не должны на самом деле вычислять начала: они все будут началами, на основе того, что Вы уже разложили на множители число как можно больше со всеми предыдущими числами.

number = 712;
currNum = number;    // the value we'll actually be working with
for (currFactor in 2 .. number) {
    while (currNum % currFactor == 0) {
        // keep on dividing by this number until we can divide no more!
        currNum = currNum / currFactor     // reduce the currNum
    }
    if (currNum == 1) return currFactor;    // once it hits 1, we're done.
}
17
задан TrueWill 10 November 2009 в 00:23
поделиться

6 ответов

Вы можете установить точку останова в Foo, откройте немедленное окно и выполните следующую команду:

? Foo(valueIn)

Это напечатает возвращаемое значение в Immediate Window.

Вы также можете скопировать выражение и вставить его в окно Watch, хотя я бы сделал это, только если я уверен, что у вызова нет побочных эффектов (иначе можно получить запутанные результаты).

6
ответ дан 30 November 2019 в 14:06
поделиться

Вы всегда можете переключиться в режим дизассемблера и выполнить отдельные инструкции. Возвращаемое значение будет в @eax (или @rax) непосредственно перед выполнением инструкции ret.

5
ответ дан 30 November 2019 в 14:06
поделиться

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

2
ответ дан 30 November 2019 в 14:06
поделиться

Вы также можете выделить любое выражение в отладчике и щелкнуть правой кнопкой мыши -> быстрое наблюдение. Это выполнит выражение (при условии, что оно действительное) и выдаст вам значение.

2
ответ дан 30 November 2019 в 14:06
поделиться

Вы всегда можете использовать окно наблюдения для оценки вызовов функций.

Foo (valueIn);

Это будет работать, только если ваш Proxy.Bar (valueIn) не зависит от времени.

0
ответ дан 30 November 2019 в 14:06
поделиться

Обходной путь - использовать переменную результата в стиле Паскаля:

public string Foo(int valueIn)
{
    string result;
    if (valueIn > 100)
        result = Proxy.Bar(valueIn);
    else
        result = "Not enough";
    return result;
}

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

0
ответ дан 30 November 2019 в 14:06
поделиться
Другие вопросы по тегам:

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