2012-01-30 17 views
8

Nói chung tôi không thể tìm thấy một danh sách ý nghĩa của các giá trị mà các trường khác nhau trong đầu ra của WinDbg của lệnh !analyze -v có thể chứa.PRIMARY_PROBLEM_CLASS STACKIMMUNE của WinDbg có nghĩa là gì?

Tìm kiếm khó khăn do thực tế là đầu ra của lệnh thường được đăng mà không có giá trị trường (giống như của DEFAULT_BUCKET_ID và PRIMARY_PROBLEM_CLASS) được giải quyết một cách rõ ràng. Có danh sách tham chiếu không?

Để cụ thể hơn: Trong khi phân tích kết xuất bộ nhớ, đầu ra của lệnh !analyze -v cho biết cả DEFAULT_BUCKET_ID và PRIMARY_PROBLEM_CLASS đều là "STACKIMMUNE". Điều đó có nghĩa là gì?

Trả lời

7

Đầu tiên là phần giới thiệu nhỏ về cách hoạt động của !analyze.

Khi !analyze cố gắng xác định lý do cho access violation (và một số loại ngoại lệ khác, ví dụ: SEH exceptions, ngoại lệ C++, tràn số nguyên, chia cho số không, v.v.), nó nhìn vào ngăn xếp cuộc gọi đã ném ngoại lệ và tìm ra những gì nằm trên đỉnh của sợi chỉ. Tuy nhiên, không phải tất cả các khung ngăn xếp đều hữu ích. Ví dụ: đối với trường hợp ngoại lệ C++, bạn sẽ thấy kernel32!RaiseExceptionyour_module!__except_handler3 ở đầu ngăn xếp. Những khung phải được bỏ qua, bởi vì họ rất khó có thể gây ra vấn đề. Đôi khi !analyze phải bỏ qua rất nhiều khung hình để đến khung hình thú vị. Chỉ cần xem một số example on other Stack Overflow question, trong đó mã vi phạm là ~ 40 khung hình bên dưới.

Để trả lời câu hỏi của bạn: STACKIMMUNE là dấu hiệu cho thấy tất cả các khung trong ngăn xếp cuộc gọi đều bị bỏ qua. Điều này có thể xảy ra khi ngăn xếp bị hỏng hoặc khi bạn có biểu tượng sai và sử dụng !reload /i để bỏ qua bất kỳ lỗi nào không khớp và có thể trong nhiều trường hợp khác.

+0

Cảm ơn. Điều đó khá rõ ràng, nhưng có liệt kê tất cả các giá trị PRIMARY_PROBLEM_CLASS có thể có và ý nghĩa của chúng không? –

+0

Xin lỗi, tôi không biết bất kỳ mô tả toàn diện về những gì! Phân tích sẽ xuất, chỉ là một bit thông tin riêng biệt. –