2012-02-03 37 views
13

Tôi đang cố gắng sử dụng WinDBG để phân tích một bãi chứa sự cố từ một trong các máy sản xuất của chúng tôi. Gốc rễ của vấn đề của tôi dường như là tôi có một bản dựng .NET khác với máy sản xuất, chỉ có tôi không biết cách khắc phục vấn đề. Khi tôi bật! Sym ồn ào và sau đó chạy! Dlk (từ SOSEX) tôi nhận được lỗi sau khi nó cố gắng tìm ra mscordacwks dllTại sao WinDBG không tìm thấy mscordacwks.dll?

0:000> !dlk 
CLRDLL: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.3623 f:0 
doesn't match desired version 2.0.50727.3607 f:0 
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found 
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found 
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found 
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found 
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.3607.dll by mscorwks search 
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.3607.dll' on the path 
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found 
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found 
DBGHELP: C:\Program Files\Debugging Tools for Windows (x86)\mscorwks.dll - file not found 
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found 
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found 
CLRDLL: Unable to find mscorwks.dll by search 
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3607.dll, Win32 error 0n2 
Unable to initialize .NET data interface. Version 2.0.50727.3607 of mscordacwks.dll is required. 
Locate and load the correct version of mscordacwks.dll. See documentation for the .cordll command. 

Tôi đã mscorwks.dll, mscordawks.dll và sos.dll từ máy sản xuất và đặt chúng trong C: \ mysymbols. Dường như WinDBG đang tìm kiếm một dll INSIDE dll mscorwks.

+1

Có vẻ như bạn đang phân tích phiên bản .NET 2.0, nhưng SOS được tải đang nhắm mục tiêu .NET 4.0. Kiểm tra http://stackoverflow.com/questions/4373683/unable-to-load-sos-in-windbg –

+3

Sử dụng lệnh ".chain" để xem thứ tự các tiện ích được tải. Đôi khi cả hai phiên bản 2.0 /4.0 sos dll được tải mà có thể gây ra vấn đề. – Naveen

Trả lời

3

Sau khi kiểm tra tra bài viết ở đây http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/

Và sau đó về cơ bản cố gắng mỗi thân của di chuyển biểu tượng xung quanh mà tôi có thể, tôi thấy rằng cách duy nhất tôi có thể làm việc này là để sao chép các mscorwks.dll, mscordawks. dll và sos.dll từ máy sản xuất vào C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727

Dường như WinDBG không hoạt động tốt với nhiều phiên bản của cùng một DLL. Có lẽ tôi đã làm một cái gì đó sai, nhưng sao chép các dlls trực tiếp vào thư mục NET Framework. Ít nhất đã cho tôi và chạy.

+0

Nó không phải là vì WinDbg không thể xử lý nhiều phiên bản của mscordacwks.dll, nhưng nó sử dụng thuật toán thiết kế để truy vấn chúng (vì nó có rất nhiều phiên bản vá), đó là phong cách bạn thích ứng tích cực. Một khi bạn quen với thực tế này, bạn sẽ không gặp nhiều rắc rối trong tương lai. –

11

Điều này rất đầy đủ explanation by Doug Stewart đã giúp tôi trong tình huống này.

Tóm tắt:

  • Lấy mscordacwks.dll từ hệ thống ban đầu.
  • Đổi tên thành thứ gì đó như mscordacwks_AAA_AAA_2.0.50727.xxxx.dll (tùy thuộc vào kiến ​​trúc của bạn và phiên bản khung công cụ cụ thể) - ví dụ: mscordacwks_x86_x86_2.0.50727.3607.dll cho trường hợp cụ thể trong câu hỏi.
  • Sao chép tệp đó vào thư mục windbg.exe.
+0

Sau một giờ dài tốt, điều này giúp tôi làm việc! – Rots

+1

@Rots, cảm ơn bạn đã quay lại! – CodeFox

+3

nhờ .. điều này làm việc cho DebugDiag quá ... sao chép vào C: \ Program Files \ DebugDiag –

0

Ngoài câu trả lời của CodeFox, bạn cần đặt thư mục nơi mscorwks.dll (hoặc clr.dll nếu bạn đang sử dụng .NET 4+) vào Đường dẫn tệp hình ảnh trong WinDbg (tắt Tệp thực đơn).

8

Sau này 2 lệnh tất cả mọi thứ trở nên OK:

0:000> .symfix 
0:000> .reload 
0

Tôi cũng đã tìm thấy rằng việc sử dụng các phiên bản 64bit của windbg và gỡ một "Bất kỳ CPU" quản lý dự án mã nơi xây dựng được thiết lập để "thích 32 bit "sẽ gây ra lỗi này.

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