Вызов функций в режиме отладки в VC++ (немедленное окно)

Интересно, могу ли я вызывать функции в режиме отладки в VC++? Предположим, что у меня есть функция, для которой я установил точку останова, когда выполнение останавливается в этой точке во время отладки, могу ли я вызывать другие функции и видеть их результаты, прежде чем переходить к следующей строке кода?


person Jawad    schedule 09.12.2011    source источник
comment
Я так не думаю. Отладчик помогает остановить в какой-то момент последовательный процесс выполнения, но не нарушит его.   -  person Mahesh    schedule 10.12.2011


Ответы (2)


Я верю, что ты можешь. Кажется, это называется Immediate Window. Я использую VS2010 Ultimate, поэтому не знаю, существует ли он в вашей версии.

Ctrl + Alt + I

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

Допустим, у вас есть:

#include <iostream>

int number = 10; //global
void setNumber(int n);

int main()
{
    std::cout<<std::endl; //breakpoint 1 here
    setNumber(4);
    std::cout<<std::endl; //breakpoint 2 here
}

int getNumberSquared()
{
    return number * number;
}

void setNumber(int n)
{
    number = n;
}

когда вы встретите точку останова 1, нажмите ярлык и введите:

getNumberSquared()

Вывод будет 100 После достижения точки останова 2 сделайте то же самое, и вывод будет 16

person devjeetroy    schedule 10.12.2011
comment
Спасибо. Я сделал это и получил эту ошибку: CXX0052: Ошибка: функция-член отсутствует. Я использую предварительно скомпилированные библиотеки без исходного кода и, следовательно, не могу вмешиваться ни в одну из их функций; однако технич. поддержка говорит, что я все еще должен иметь возможность вызывать любую из функций в библиотеке и просматривать ее вывод в режиме отладки, что-то вроде определения размера массива. - person Jawad; 12.12.2011
comment
ах, как я уже сказал, интерактивный режим работает не всегда. Но в основном это так. Я не смогу ничего сказать вам о его совместимости с библиотеками. - person devjeetroy; 12.12.2011
comment
Спасибо. Попробую другие функции, надеюсь что-то получится. - person Jawad; 13.12.2011

В Visual Studio есть возможность перейти к определенному оператору (right click + set next statement или ctrl+shift+F10), но будьте осторожны при этом. Вызов функции требует, чтобы реестры были действительными, чего, скорее всего, не будет, если вы перепрыгнете через классы или выйдете за рамки.

person Luchian Grigore    schedule 09.12.2011
comment
@Jawad, конечно, это задумано. Среда выполнения не может знать, чего вы хотите... - person Luchian Grigore; 12.12.2011