2012-02-21 7 views
6

tôi ban đầu được sử dụng Visual Studio C++ Express, tôi đã chuyển sang tối và im hiện bối rối là tại sao các trình gỡ lỗi đang chuyển breakpoint của tôi, ví dụ:Visual Studio breakpoint được chuyển

if(x > y) { 
    int z = x/y;   < --- breakpoint set here 
} 
int h = x+y;    < --- breakpoint is moved here during run time 

hoặc

random line of code  < --- breakpoint set here 
random line of code 

return someValue;  < --- breakpoint is moved here during run time 

Dường như làm điều này tại các vị trí ngẫu nhiên trong mã. Có đôi khi tôi đang làm sai ở đây? Tôi chưa bao giờ gặp vấn đề với phiên bản nhanh như thế này.

Trả lời

10

Bạn đang gỡ lỗi trong chế độ phát hành.

if(x > y) { 
    //this statement does nothing 
    //z is a local variable that's never used 
    //no executable code is generated for this line 
    int z = x/y;   < --- breakpoint set here 
} 
//the breakpoint is set on the next executable line 
//which happens to be this one 
int h = x+y;    < --- breakpoint is moved here during run time 

Thường thì trình gỡ rối đặt móc bên trong mã nhị phân. Nếu không có mã nhị phân nào được thực hiện cho int z = x/y, bạn không thể đặt điểm ngắt tại đó.

Sau đây được tạo ra bằng cách biên dịch này trong chế độ phát hành:

if(x > y) 
{ 
    int z = x/y;//   < --- breakpoint set here 
} 
int h = x+y; 
cout << h; 
003B1000 mov   ecx,dword ptr [__imp_std::cout (3B203Ch)] 
003B1006 push  7  
003B1008 call  dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (3B2038h)] 

Để kiểm tra điều này, bạn có thể thực hiện thay đổi đơn giản này:

if(x > y) { 
    int z = x/y; 
    std::cout << z << endl; // <-- set breakpoint here, this should work 
} 
int h = x+y;    
+0

Tôi đồng ý đây là nguyên nhân likly nhất, tôi sẽ cũng lưu ý rằng trong quá khứ, tôi đã thấy sự phân biệt giữa các dòng được báo cáo thông qua trình gỡ rối và IDE do sự khác biệt về kết thúc dòng (NL vs CR NL). là một vấn đề với VS. – tletnes

+0

@tletnes hmm thú vị, tôi chưa bao giờ gặp phải điều này mặc dù trong VS. –

+0

Ngay trên! Tôi hoàn toàn bỏ qua rằng tôi đang ở chế độ phát hành. Cảm ơn bạn! – kbirk