我正在使用 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
}
答案 0 :(得分:7)
值得快速检查..
在Visual Studio中,转到工具> 选项... 强>
点击左侧的调试
在左侧查找启用我的代码(管理)如果选中,取消选中它,点击“确定”
为了更好的衡量标准,我总是退出VS并返回
答案 1 :(得分:6)
您需要调试信息才能输入glutMainLoop。当没有源代码或没有可用于glutMainLoop的调试信息时,调试器无法显示源代码。如果要单步执行此功能,则需要同时添加两者。
或者,您可以使用 Shift - F11 进入反汇编。但我不认为这会对这种情况有所帮助。
答案 2 :(得分:4)
在单步执行CameraMain
中的代码时,您是否希望能够在调用display
时进入glutDisplayFunc(display);
?
在这种情况下,它不会发生,因为此时display
函数不被调用。而是由GLUT保存,以便从GLUT主循环内部调用。您必须在display
函数中设置断点才能逐步执行它。