Почему режим отладки Visual Studio Step Into (F11) иногда не входит в некоторые функции? - PullRequest
8 голосов
/ 30 января 2012

Я отлаживал данный код C ++ с помощью клавиши F11 (режим Step Into), чтобы понять точный порядок вызова функций в коде, и я понял, что это будет никогда не входите в некоторые функции, если я не установил точку останова в какой-либо строке внутри определения функции.

Я имею в виду, если я вызываю функцию из основного метода, а функция определяется в другом .cpp Я ожидаю, что режим отладки F11 войдет шаг за шагом внутрь функция для анализа изменений переменных. В большинстве случаев это происходит, но в некоторых случаях он просто выполняет функцию, не заходя в нее, и переходит на следующую строку в основном методе.

Почему это происходит?

Пример:

Это функция, в которую F11 никогда не вступит:

void VirtualCamera::display (void) {
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Clear the background of the window
    glClear(GL_COLOR_BUFFER_BIT); //Clear the colour buffer (more buffers later on)
    glLoadIdentity(); // Load the Identity Matrix to reset our drawing locations

    glTranslatef(0.0f, 0.0f, -5.0f);
    renderPrimitive(); // Render the primitive

    glFlush(); // Flush the OpenGL buffers to the window
}

Это основной метод, в котором F11 идет шаг за шагом:

void VirtualCamera::CameraMain(int argc, char **argv){
    glutInit(&argc, argv); // Initialize GLUT
    glutInitDisplayMode (GLUT_SINGLE); 
    glutInitWindowSize (500, 500); // Set the width and height of the window
    glutInitWindowPosition (100, 100); // Set the position of the window
    glutCreateWindow ("OpenGL Window"); // Set the title for the window

    glutDisplayFunc(display); // Tell GLUT to use the method "display" for rendering
    glutReshapeFunc(reshape);

    glutMainLoop(); // Enter GLUT's main loop   
}

Ответы [ 3 ]

7 голосов
/ 30 января 2012

Стоит быструю проверку ..

В Visual Studio перейдите к Инструменты > Параметры ...

Нажмите Отладка на левой стороне

Слева найдите Включить только мой код (управляемый) , если он отмечен, снимите флажок, нажмите « OK »

На всякий случай я всегда выхожу из VS и возвращаюсь в

6 голосов
/ 30 января 2012

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

В качестве альтернативы вы можете войти в разборку, используя Shift - F11 . Но я не думаю, что это поможет в этом случае.

4 голосов
/ 30 января 2012

При переходе по коду в CameraMain ожидаете ли вы, что сможете набрать display при вызове glutDisplayFunc(display);?

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

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