2012-02-10 28 views
5

tôi đang sử dụng (C++) visual studio 2010.điểm Break trong chế độ phát hành

tôi phải theo dõi các luồng điều khiển của appication.So của tôi mà tôi đã đặt một điểm break trong mã nguồn

khi chạy ứng dụng ở chế độ debugg, số lần truy cập điểm ngắt. Nhưng trong chế độ realease nó đã không trúng.

Vì vậy, vui lòng đề xuất giải pháp để làm nóng điểm ngắt trong chế độ phát hành ???

+0

Không có cách nào. Đó là (một trong những lý do) thực sự là chế độ gỡ lỗi nào. Tại sao bạn muốn nhấn breakpoint trong chế độ phát hành? –

+1

Chế độ "Phát hành" cho phép tối ưu hóa có thể (và thường xuyên làm) làm gián đoạn luồng mã của bạn. Rất khó để xem sự cố xảy ra khi bật tối ưu hóa, đó là lý do tại sao chúng không được bật trong chế độ "Gỡ lỗi". Các lập trình viên thường sử dụng điều đó để thực hiện gỡ lỗi của họ. Bạn không thấy sự cố bạn đang cố gắng giải quyết trong chế độ Gỡ lỗi? –

+1

Và ngôn ngữ lập trình là gì? –

Trả lời

7

Trong chế độ phát hành, mã của bạn được tối ưu hóa và có thể thay đổi luồng chương trình của bạn. Ví dụ, nếu một hàm đơn giản và chỉ được gọi một lần, trình biên dịch có thể nội tuyến hàm trong chế độ phát hành.

Chế độ gỡ lỗi không có loại tối ưu hóa này và được thiết kế để gỡ lỗi mã của bạn.

0

Điểm ngắt chế độ phát hành thuận tiện để hoạt động. Cách đơn giản nhất để làm việc đó là thực hiện cuộc gọi đến hàm có tên release_mode_breakpoint() trong mã của bạn. Sau đó, xác định chức năng như sau:

#pragma optimize("", off) 
void release_mode_breakpoint() 
{ 
    int put_breakpoint_here = 1; 
} 
#pragma optimize("", on) 

Sau đó, bạn có thể đặt điểm ngắt trên dòng khai báo int đó và nó sẽ bị trúng ngay cả trong chế độ phát hành. Sau đó, chỉ cần đẩy lên ngăn xếp trong trình gỡ rối trở lại hàm bạn thực sự muốn một điểm ngắt.

Không thực sự để lại mã đó trong phiên bản sản xuất cuối cùng của bạn, vì dòng không được tối ưu hóa có thể ngăn trình biên dịch tối ưu hóa cuộc gọi mã đúng.

3

Bạn có thể sử dụng hàm __debugbreak() intrinisic. Điều này cũng rất tiện dụng nếu bạn muốn phá vỡ một điều kiện cụ thể. Ví dụ:

if (var > LIMIT) 
    __debugbreak(); 
+0

không hoạt động ở chế độ phát hành trong VC++ 2013 –

12

Tôi đang sử dụng VS2015. sau nhiều giải pháp không thành công, tôi tìm thấy một giải pháp phù hợp với mình. Chỉ cần bỏ chọn "Enable Just My Code" trong Menu-> Debug-> Options-> Debugging-> General. Xem hình ảnh kèm theo: enable debug in release mode-VS2015

Tôi thực sự hy vọng điều này sẽ giải quyết vấn đề cho bạn :)

+0

Việc này đã giải quyết được sự cố của tôi. –

Các vấn đề liên quan