Почему режим отладки Visual Studio шаг в (F11) иногда не входит в некоторые функции?

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

Я имею в виду, если я вызываю функцию из метода main, а функция определена в другом .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 ответов


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

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


стоит быстрая проверка..

в Visual Studio перейдите в инструменты>параметры...

клик отладка на левой стороне

слева ищем включить только мой код (управляемых) если он установлен, снимите его, нажмите " OK"

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


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

в этом случае это не происходит, потому что