为什么Visual Studio的调试模式Step Into(F11)有时不进入某些功能?

时间:2012-01-30 14:51:07

标签: c++ visual-studio-2008 visual-studio-debugging

我正在使用 F11 键(Step Into模式)调试给定的C ++代码,以便了解调用代码中函数的精确顺序,并且我意识到它除非我在函数定义中的某一行设置断点,否则永远不会进入某些函数。

我的意思是,如果我从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   
}

3 个答案:

答案 0 :(得分:7)

值得快速检查..

在Visual Studio中,转到工具> 选项...

点击左侧的调试

在左侧查找启用我的代码(管理)如果选中,取消选中它,点击“确定

为了更好的衡量标准,我总是退出VS并返回

答案 1 :(得分:6)

您需要调试信息才能输入glutMainLoop。当没有源代码或没有可用于glutMainLoop的调试信息时,调试器无法显示源代码。如果要单步执行此功能,则需要同时添加两者。

或者,您可以使用 Shift - F11 进入反汇编。但我不认为这会对这种情况有所帮助。

答案 2 :(得分:4)

在单步执行CameraMain中的代码时,您是否希望能够在调用display时进入glutDisplayFunc(display);

在这种情况下,它不会发生,因为此时display函数被调用。而是由GLUT保存,以便从GLUT主循环内部调用。您必须在display函数中设置断点才能逐步执行它。