2013-06-25 26 views
6

Tôi đang thử thư viện mới từ microsoft, ClrMD, để phân tích sự cố và kết xuất trực tiếp."Lỗi tải DAC: CreateDacInstance không thành công" khi tải tệp kết xuất bằng ClrMD

Tôi đã làm theo mẫu trong khuôn khổ .NET blog post (sử dụng attached .cs file).

Tôi đã cố chạy mẫu để phân tích tệp .dmp được lấy từ một chương trình chạy trên cùng một máy như mẫu.

khi cố gắng để tạo ra các đối tượng thời gian chạy, sử dụng đoạn mã sau:

ClrRuntime runtime = target.CreateRuntime(dacLocation); 

ngoại lệ này được ném:

nhắn: Không tải DAC: CreateDacInstance thất bại 0x80131c30

tại Microsoft.Diagnostics.Runtime.Desktop.DacLibrary.Init (String dll)

tại Micro soft.Diagnostics.Runtime.Desktop.DacLibrary..ctor (DbgEngTarget dataTarget, String dll)

tại Microsoft.Diagnostics.Runtime.DbgEngTarget.CreateRuntime (String dacFilename)

tại DumpFetch.App..ctor()

Bất kỳ ý tưởng nào?

Trả lời

6

Tôi có vấn đề tương tự với bản phát hành ban đầu của ClrMD. Nó không thể tải thành công một MSCORDACWKS mà WinDbg vui vẻ chấp nhận, nằm trong đường dẫn mà tôi đã có sẵn cho ClrMD và có thể sử dụng thành công với WinDbg so với cùng một kết xuất. Điều tương tự cũng xảy ra với bản phát hành ban đầu của DebugDiag v2 mà tôi hiểu, dựa trên ClrMD. Tôi đã thực hiện cùng một DAC được đổi tên được chấp nhận bởi WinDbg có sẵn trên đường dẫn biểu tượng của DebugDiag và DebugDiag hủy bỏ phân tích; nói rằng dấu thời gian và kích thước của [được cung cấp] "mscordacwk.dll" không khớp với dấu thời gian trong kết xuất "; mặc dù sau khi tải nỗ lực thông qua ProcMon rõ ràng cho thấy nó đã được truy cập vào DLL chính xác thông qua tên được chấp nhận WinDbg.

Tuy nhiên, khi làm việc với nhóm Microsoft trên DebugDiag v2 không thể tải DAC, tôi đã có thể lấy TAM để cung cấp bản sao đầu tiên của ClrMD "cố định" được đặt tên là ClrMD 0.8.5 giải quyết những vấn đề như vậy đối với tôi. Đó là một phiên bản alpha và tôi không được phép phân phối lại nó, nhưng ít nhất bạn có thể tìm phiên bản đó hoặc phiên bản mới hơn 0.8.5 trong tự nhiên.

Một điều khác: Khi sử dụng WinDbg 32 bit hoặc 64 bit thích hợp, bạn thường có thể chỉ nhận được hai biến thể được đặt tên của MSCORDACWKS: một cho 64 bit và một cho 32 bit. Vì vậy, để tải MSCORDACWKS cho .Net 4.0.0319.1008 từ một máy khác, ví dụ, bạn có thể đổi tên phiên bản 64-bit của máy chủ mục tiêu kết xuất ra khỏi C: \ Windows \ Microsoft.NET \ Framework64 thành mscordacwks_AMD64_AMD64_4.0.31319.1008.dll cho một Ứng dụng 64 bit và đổi tên phiên bản 32 bit ra khỏi C: \ Windows \ Microsoft.NET \ Framework64 thành mscordacwks_x86_x86_4.0.30319.1008.dll cho ứng dụng 32 bit và khá thành công.

Có một nếp nhăn bổ sung, mặc dù, wr ClrMD. Bạn có thể kết thúc với thư viện ClrMD cố gắng cho các phiên bản bổ sung có tên của DAC phụ thuộc vào bit-ness bạn đang sử dụng như là mục tiêu Xây dựng cho Visual Studio biên dịch ứng dụng của bạn bằng cách sử dụng ClrMD.

Khi tôi xây dựng bộ thử nghiệm ClrMd đầu tiên cho nền tảng mục tiêu 64 bit không có thói quen, ClrMd đang tìm lib có tên mscordacwks_x86_amd64_4.0.30319.1008.dll thay vì tên "... x86_x86 ...". Mặc dù thực tế rằng tôi đã chạy thử nghiệm khai thác của tôi chống lại một ứng dụng 32-bit, chỉ cần đổi tên DAC từ một trong hai tên gọi nêu trên dường như không hoạt động. (Tôi không nói rằng tôi không có gì sai, chỉ là nó không hiệu quả với tôi. Số dặm của bạn có thể thay đổi.)

Tuy nhiên, khi tôi thay đổi mục tiêu xây dựng trong VS2010 thành 32 bit , phiên bản 0.8.5 "cố định" ngay lập tức được tải đúng tên mscordacwks_x86_x86_4.0.30319.1008 DLL mà không gặp sự cố nào khác.

+0

Tôi đoán nó cố gắng tải X86_Amd64 DAC khi quá trình kết xuất 32 bit được tạo bởi công cụ 64 bit. https://blogs.msdn.microsoft.com/tess/2010/09/29/capturing-memory-dumps-for-32-bit-processes-on-an-x64-machine/ –

1

Có một phương pháp khác trên ClrVersion gọi là TryDownloadDac(); mà sẽ tải xuống đúng, nhưng bạn cần phải chạy một quá trình trên cùng một kiến ​​trúc như cái bạn đang gỡ lỗi (ứng dụng 64 bit để gỡ lỗi 64bit, ứng dụng 32 bit để gỡ lỗi 32). Điều này là bởi vì nó cần phải tải thư viện DAC vào bộ nhớ.

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