Không thể tải SOS trong WinDbg


132

Bối cảnh: Tôi mới sử dụng WinDbg và lần đầu tiên thử chạy nó. Tôi muốn kiểm tra kết xuất bộ nhớ mà tôi đã lấy từ một trang web ASP.NET 4 đang chạy được lưu trữ trong IIS 7 trên Windows Server 2008 (x86) và được tải xuống máy cục bộ của tôi.

Tôi đã cài đặt các công cụ sửa lỗi và khởi chạy WinDbg lần đầu tiên, mở kết xuất sự cố. Tôi đã đi đến tập tin | Đường dẫn tệp biểu tượng và đặt đường dẫn đến *srv*c:\symbols*http://msdl.microsoft.com/download/symbols*và chờ cho tất cả các biểu tượng được tải.

Khi cố gắng tải SOS, tôi gặp vấn đề. Đầu tiên, tôi đã thử lệnh sau ...

.loadby sos mscorwks

... Và nhận được phản hồi Unable to find module 'mscorwks'.

Sau khi quét web, tôi đã thử tải mscorwks bằng cách thực hiện lệnh sau ...

sxe ld mscorwks.dll
g

... và nhận được phản hồi "Không có lỗi gỡ lỗi có thể chạy được trong 'g'"

Tôi đã sao chép SOS.dll (từ C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) vào thư mục WinDbg, sau đó thử ...

.load sos

... và đã nhận được lỗi ...

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

Tôi không chắc chắn làm thế nào để tiến hành. Tôi chỉ muốn tải SOS và đào xung quanh tệp kết xuất này. Mọi sự trợ giúp sẽ rất được trân trọng.

Fyi ... Tôi đang cố mở tệp kết xuất trên phiên bản Windows 7 64 bit với phiên bản Windbg 64 bit.

Câu trả lời:


203

Thời gian chạy CLR dll đã được đổi tên thành clr.dll.NET 4. Vì vậy, để tải phiên bản chính xác của SOS, bạn cần điều chỉnh .loadbylệnh của mình . I E

.loadby sos clr

Ngoài ra, nếu bạn đang ở trên 64 bit, bạn cũng nên cài đặt phiên bản Công cụ gỡ lỗi 32 bit cho Windows để gỡ lỗi các ứng dụng 32 bit. Họ cài đặt cạnh nhau, vì vậy không có vấn đề gì khi có cả phiên bản 32 bit và 64 bit trên cùng một máy.

Tôi sẽ tư vấn chống sao chép SOS.dll. SOS cần khớp với phiên bản chính xác của khung, miễn là bạn tải nó từ thư mục khung bằng cách sử dụng .loadby, bạn đã hoàn tất.


Tôi thấy rất khó khăn để có được cả hai trên hệ thống của mình, vì các trình cài đặt mới nhất tự động phát hiện loại CPU. Có một cờ ghi đè mà bạn biết cho msi? Tôi sẽ cài đặt phiên bản 32 bit cũ của WinDbg, nhưng không biết nên mong đợi điều gì.
Dave

5
@Dave: Có thể quá ít quá muộn, nhưng theo trang web cài đặt được tìm thấy ở đây: msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx bạn có thể chọn để cài đặt Gói Redistributable có thể đặt MSIs cho mỗi phiên bản kiến ​​trúc tại đây : C: \ Tệp chương trình \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Công cụ gỡ lỗi cho Windows
Aaron Lerch

Nếu tôi nói .loadby sos clrtôi nhận được Unable to find module 'clr'. Tôi đang cố gắng gỡ lỗi .NET 4 với x64 WinDbg
Csaba Toth

2
@CsabaToth là một bãi rác hoặc bạn đang thực hiện gỡ lỗi trực tiếp? Nếu bạn đang gỡ lỗi trực tiếp, CLR có thể chưa được tải. Bạn có thể làm sxe ld clrđể dừng khi CLR đã được tải và sau đó bạn có thể tải SOS tại thời điểm đó.
Brian Rasmussen

@BrianRasmussen Đây là một tệp thực thi được biên dịch. Nếu tôi nhìn vào cửa sổ Mô-đun, hãy tải nó.
Csaba Toth

18

Lệnh WinDbg 'g' có nghĩa là [Tiếp tục]

Vì bạn đang mở tệp kết xuất, không có cách nào để 'tiếp tục', nên nó chỉ chứa bộ nhớ quy trình.

Vì vậy, thông báo "Không có lỗi gỡ lỗi có thể chạy trong 'g'" là hợp lý trong trường hợp của bạn do quá trình không chạy .

Liên quan đến việc tải phiên bản chính xác của SOS sử dụng lệnh sau tùy thuộc vào phiên bản .NET.

.NET 4 và cao hơn .loadby sos

.NET 3.5 và 2 .loadby sos mscorwks

.NET 1.0 và 1.1 .load clr10 \ sos


1

Câu trả lời ở trên cần cải thiện, vì theo thời gian, mọi thứ đã dễ dàng hơn để xử lý tải sos.

JOHN ROBBINS có một bài viết hay xung quanh nó, Xem các máy chủ biểu tượng của Microsoft được cấu hình trong đường dẫn tệp biểu tượng và chạy! Phân tích -v trên dấu nhắc của Windbg, điều này sẽ thực hiện thủ thuật nó sẽ tải xuống các tệp sos có liên quan. Để xác minh chạy .chain trên dấu nhắc và bạn sẽ thấy dll được tải.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.