Điều này thật điên rồ. Nó bắt đầu xảy ra trong dự án chính của tôi, vì vậy tôi đã tạo ra một dự án mẫu hoàn toàn mới để tái sản xuất nó và chắc chắn đủ. Nó KHÔNG xảy ra trong một dự án mẫu mà tôi tạo ra chỉ là một ứng dụng giao diện điều khiển Win32.Vi phạm quyền truy cập MFC 200200 C++ CHỈ khi bước qua chế độ gỡ lỗi
Tôi đang chạy tính năng này trên Win7x64, nếu điều đó quan trọng. VS2008 SP1.
Đây. Tôi tạo một ứng dụng hộp thoại nhỏ bằng một nút. Đặt một điểm ngắt trong hàm xử lý cho nút đó. Chức năng xử lý nút trông giống như sau:
void CTestProjectDlg::OnBnClickedButton1()
{
int i;
i = 2; // < breakpoint here
i = 3;
}
Nhấp vào nút, nhấn điểm ngắt. F10 đến bước và bùng nổ: "Ngoại lệ cơ hội đầu tiên tại 0x0398f77b trong TestProject.exe: 0xC0000005: Vi phạm truy cập".
Nó cho tôi tùy chọn để Break hoặc Continue. Nếu tôi tiếp tục, nó chỉ đánh nó một lần nữa, không chỉ là "Cơ hội đầu tiên". Có, tôi đã kiểm tra ngoại lệ trong Debug-> Exceptions dlg.
Nếu tôi ngắt, ngăn xếp cuộc gọi chỉ hiển thị cho tôi dòng có điểm ngắt. Nếu tôi F10 một lần nữa .. Tôi nhận lại ngoại lệ, chỉ bây giờ callstack hiển thị cho tôi trong hàm _AfxDispatchCmdMsg() và OnBnClickedButton1() ban đầu của tôi không còn trong callstack nữa.
Việc đặt điểm ngắt không thành vấn đề.
Nếu, thay vì F10, tôi chỉ tiếp tục với F5, nó hoạt động bình thường.
Bây giờ .. nếu tôi xây dựng một phiên bản phát hành và chạy trong chế độ gỡ lỗi: Tôi nhấn điểm ngắt và tất cả các con trỏ, giá trị biến trông bình thường. F10, và chúng biến thành rác. Con trỏ này bây giờ là không. M_csHello hiện là
Tuy nhiên, trong chế độ Phát hành, ngoại lệ không bị bắt và tất cả đều chạy tốt. "Xin chào chuỗi thế giới được hiển thị trong hộp thoại như cần.
Tôi đã đặt trong một cuộc điều tra để xem một số bản vá đã được cài đặt trên hộp của tôi bởi các phòng CNTT trong ngày hoặc hai ngày qua. .? xảy ra 2 ngày trước
bạn nghĩ gì là VS2008 hỏng
Cảm ơn
Edit:?.. Thông tin bổ sung này không xảy ra nếu tôi xây dựng/debug nền tảng x64 Chỉ dành cho Win32..
Tôi cũng đã xem xét tất cả các bản cập nhật hotfix/bảo mật cho VS2008 trên hộp. là
Cuối cùng, tôi đưa dự án trên một máy khác nhau mà chưa được cập nhật trong 2-3 tuần vừa qua. Nó hoạt động tìm thấy trên đó, và nó có các bản cập nhật VS tương tự được cài đặt.
Tôi cũng đã thay đổi mã đang được thực hiện cho mục đích của bài đăng này. .. Nó là một số nguyên đơn giản, không có MFC liên quan.
Hiện tại tôi đang ở giữa quá trình cài đặt lại VS2008.
Bạn đã liên kết Control (nói IDC_BUTTON1) như ON_BN_CLICKED (IDC2_BUTTON1, OnBnClcikedCutton1)? Nó có thể là một vấn đề. – Sunscreen
Có. Đó là làm thế nào nó được đến breakpoint, nếu tôi hiểu câu hỏi của bạn. – HotOil
Trong code của bạn, ở đâu đó vào lúc bắt đầu, bạn phải liên kết Control của hộp thoại của bạn với chức năng rlated: BEGIN_MESSAGE_MAP (CTestProjectDlg, CDialog) ... ON_BN_CLICKED (IDC2_BUTTON1, OnBnClcikedCutton1) Bạn có thể tìm kiếm trên mã cpp của bạn cho "ON_BN_CLICKED"? Có phải không? – Sunscreen