2010-10-22 30 views

Trả lời

5

Điều đó có nghĩa là trình gỡ lỗi không thể tìm ra giá trị của nó.

Ví dụ: bạn thấy điều này một chút nếu mã của bạn liên quan đến HWND s. Nếu bạn xem xét thông qua các tập tin tiêu đề Windows, nó được định nghĩa như thế này thông qua một vĩ mô:

struct HWND__{int unused;}; typedef struct HWND__ *HWND; 

Vì vậy, các loại HWND thực sự là loại "con trỏ đến một HWND__". Tuy nhiên, các giá trị HWND bạn nhận được từ các chức năng như CreateWindow() không thực sự trỏ đến bất kỳ thứ gì.

Nhưng debugger sẽ cố gắng tìm ra các giá trị của unused thành viên trong các cấu trúc, nhưng không thể làm điều đó:

Watch Window

Bạn cũng sẽ thấy các loại lỗi khi theo dõi biến có thông tin loại bị thiếu hoặc bị thiếu.

+0

Không đúng sự thật. Các ??? chuỗi lỗi có liên quan đến thông tin loại xấu. Nếu nó không thể đánh giá biểu thức nó sẽ cung cấp một thông báo lỗi hữu ích hơn – JaredPar

+0

@ JaredPar: từ ngữ của tôi là một chút tắt. Những gì tôi có nghĩa là trình gỡ lỗi không thể tìm ra giá trị của nó. –

+0

Gotcha. Phiên bản đã chỉnh sửa đã xóa đi sự nhầm lẫn. Nhưng nó hiển thị ??? cho các loại xấu và giá trị xấu. – JaredPar

1

Đây có phải là dự án kiểu C++ không?

Trình gỡ lỗi thường sử dụng "???" chuỗi khi nó có thể đánh giá một biểu thức nhưng không thể thu được bất kỳ thông tin kiểu nào cho một phần cụ thể của màn hình. Điều này thường xảy ra do thiếu hoặc không chính xác các ký hiệu PDB.

Có khả năng một cách để điều này xảy ra nếu biểu thức đang truy cập dữ liệu bị hỏng (bảng ảo được ghi đè hoặc RTTI). Nhưng tôi không biết 100% nếu điều đó đúng.

1

Thông thường nó có nghĩa là con trỏ hoặc tham chiếu trỏ đến bộ nhớ không thể tiếp cận, và do đó nó không thể có được giá trị để trình bày. Ví dụ, nếu bạn có một con trỏ được cho là trỏ đến một Foo, trình gỡ lỗi thường sẽ giải thích các bit mà con trỏ trỏ tới như một Foo - cho dù con trỏ có hợp lệ hay không. Nhưng trong một số trường hợp, một con trỏ hoang dã có thể trỏ đến một vị trí thậm chí không được ánh xạ trong không gian quy trình. Trong trường hợp đó, trình gỡ lỗi không thể nhận được các bit.

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