2012-06-28 26 views
28

Tôi phải gỡ lỗi một dự án C++, nhưng như một phụ thuộc không biên dịch trong chế độ gỡ lỗi và tôi đã không thể khắc phục vấn đề đó cho đến nay, tôi muốn thử gỡ lỗi dự án trong chế độ phát hành.Làm thế nào để gỡ lỗi trong chế độ phát hành?

Hiện tại, ứng dụng gặp sự cố do con trỏ rỗng, nhưng tôi không có mã gây ra lỗi. Như điểm break dường như bị bỏ qua trong chế độ phát hành, tôi muốn biết cách tốt nhất để tìm lỗi là gì.

Trả lời

52

Trong VS, hãy nhấp chuột phải vào dự án của bạn, chọn "Thuộc tính".

  1. Nhấp vào nút C/C++. Đặt Định dạng Thông tin Gỡ lỗi thành C7 tương thích (/ Z7) hoặc Cơ sở dữ liệu Chương trình (/ Zi).

  2. Mở rộng Trình liên kết và nhấp vào nút Chung. Đặt Bật liên kết gia tăng thành Không (/ INCREMENTAL: NO).

  3. Chọn nút Gỡ lỗi. Đặt Tạo thông tin gỡ lỗi thành Có (/ DEBUG).

  4. Chọn nút Tối ưu hóa. Đặt tham chiếu thành Có (/ OPT: REF).

    nếu/OPT: REF được chỉ định,/OPT: ICF được bật theo mặc định.

Đó là tách trực tiếp từ tài liệu của Microsoft:

Tôi làm điều này tất cả thời gian và khá nhiều không bao giờ gỡ lỗi trong chế độ gỡ lỗi nữa. Như bạn đã biết, nhiều lỗi xảy ra trong bản phát hành bản phát hành có thể không xảy ra trong bản dựng gỡ lỗi (hầu như chắc chắn là các lỗi phát sinh từ việc gọi UB).

Ngoài ra, tôi làm việc trên một dự án sử dụng một tấn xử lý hình ảnh và thực hiện rất nhiều nén/giải nén các hình ảnh lớn. Sử dụng xây dựng gỡ lỗi chậm chỉ đơn giản là không thực tế.

+0

nhờ giải quyết vấn đề!Tôi không biết nhiều về hiệu ứng của tất cả các cài đặt này, vì vậy tốt hơn là chỉ sử dụng chúng để gỡ lỗi và loại bỏ chúng một lần nữa khi biên dịch một phiên bản phát hành thực tế? – Pedro

+5

@Pedro: Có, tốt nhất là nên hoàn nguyên chúng và để nguyên giá trị mặc định cho bản phát hành BẬT. Tôi thường tạo loại bản dựng mới cho cấu hình này, tức là "phát hành w/biểu tượng". Điều đó nói rằng, nó không thể làm tổn thương để đi nghiên cứu những gì các thiết bị chuyển mạch thực sự làm. –

4

Bạn không thể luôn thay đổi cài đặt dự án và biên dịch lại.
Đôi khi bạn có một phiên bản được phát hành mà bạn muốn gỡ lỗi hoặc tệp kết xuất do khách hàng gửi.

Khi biên soạn dự án C++ khi được phát hành với tối ưu hóa, trình gỡ lỗi đôi khi không hiển thị thông tin đối tượng phù hợp.

Biến cục bộ thường là biến đầu tiên và nhiều lần, thông tin của đối tượng này bị mất cho trình gỡ lỗi.

Lý do là trình biên dịch sử dụng thanh ghi phần cứng có sẵn để giữ thông tin và sử dụng tối ưu hóa để tránh phân bổ biến cục bộ.

Tôi đã gợi ý một cách để tìm ra thông tin còn thiếu ở đây:

Debugging Release Projects in C++ - Finding the Lost Object Information

+0

@Ed s câu trả lời là rất tốt nếu bạn có quyền truy cập vào mã và IDE. Câu trả lời đáng đọc của Yochai. –

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