2012-01-30 14 views
8

Tôi đã gỡ lỗi mã C++ đã cho bằng phím F11 (Chế độ bước vào) để hiểu thứ tự chính xác trong đó các hàm trong mã được gọi và tôi nhận ra rằng nó sẽ không bao giờ nhập vào một số chức năng trừ khi tôi thiết lập một breakpoint tại một số dòng bên trong định nghĩa hàm.Tại sao chế độ gỡ lỗi của Visual Studio Bước vào (F11) đôi khi không nhập vào bên trong một số chức năng?

Ý tôi là, nếu tôi gọi một hàm từ phương pháp chính, và các chức năng được định nghĩa trong một cpp Tôi hy vọng chế độ F11 gỡ lỗi để nhập từng bước bên trong hàm để analize biến thay đổi. Hầu hết thời gian, nhưng trong một số trường hợp, nó chỉ thực hiện chức năng mà không cần bước vào nó, và nhảy đến dòng tiếp theo trong phương thức chính.

Tại sao điều này lại xảy ra?

Ví dụ:

Đây là chức năng F11 sẽ không bao giờ bước vào:

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 
} 

Đây là phương pháp chính mà F11 đi từng bước:

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 
} 

Trả lời

6

Bạn cần thông tin gỡ lỗi để nhập glutMainLoop. Khi không có mã nguồn hoặc không có thông tin gỡ lỗi có sẵn cho glutMainLoop trình gỡ lỗi không thể hiển thị mã nguồn. Khi bạn muốn bước duy nhất chức năng này, bạn cần phải thêm cả hai.

Hoặc bạn có thể nhập để tháo gỡ bằng cách sử dụng Shift - F11. Nhưng tôi không nghĩ rằng điều này sẽ giúp ích trong trường hợp này.

6

Worth một kiểm tra nhanh ..

Trong Visual Stu dio, đi đến cụ>Options ...

Bấm Debugging trên bên trái

Trên cái nhìn trái cho Enable Just Mã của tôi (Quản lý) nếu nó được chọn, bỏ chọn nó , nhấn "OK "

Đối với biện pháp tốt tôi luôn luôn thoát khỏi VS và quay trở lại trong

+0

Tôi đã bỏ chọn, nhưng dù sao cũng được. Ý tôi là tôi mong rằng khi F11 vào dòng 'glutMainLoop()' cũng bước vào màn hình hiển thị chức năng, nhưng nó chỉ xảy ra nếu tôi đặt một điểm ngắt bên trong màn hình (void). –

4

Khi bước t hrough mã trong CameraMain, bạn có hy vọng để có thể bước vào display trên các cuộc gọi đến glutDisplayFunc(display);?

Trong trường hợp đó, điều này không xảy ra do hàm displaykhông phải là được gọi tại thời điểm đó. Thay vào đó nó được lưu bởi GLUT để được gọi từ bên trong vòng lặp chính GLUT. Bạn phải đặt điểm ngắt trong hàm display để có thể thực hiện bước này.

+0

Tôi mong đợi để có thể bước vào hiển thị vào 'glutMainLoop', nhưng như bạn đã nói, nó là cần thiết một breakpoint. Tại sao vậy? Nó luôn luôn xảy ra với các vòng? –