Я отлаживал данный C++ код с помощью клавиши F11 (режим Step Into), чтобы понять точный порядок вызова функций в коде, и понял, что он никогда не войдет внутрь некоторых функций, если я не установлю точку останова на какой-то строке внутри определения функции.
То есть, если я вызываю функцию из метода main, а функция определена в другом .cpp, я ожидаю, что режим отладки F11 будет пошагово входить внутрь функции, чтобы проанализировать изменения переменных. В большинстве случаев так и происходит, но в некоторых случаях он просто выполняет функцию, не заходя в нее, и переходит к следующей строке в методе main.
Почему это происходит?
Пример:
Это функция, в которую 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
}