2013-05-07 24 views
16

Tôi đang cố gắng sử dụng windbg để nghiên cứu tệp kết xuất hang được tạo trên máy x64 cho quy trình x86 của chúng tôi. Đây là một ứng dụng 4.0 x86, vì vậy chỉ cần để có được một đống không được quản lý, tôi phải làm như sau:SOS không hỗ trợ kiến ​​trúc đích hiện tại

.loadby sos clr 
.load wow64exts 
!sw 
kL 

Tuy nhiên, mỗi lần tôi cố gắng để có được những ngăn xếp quản lý thông qua !clrstack tôi nhận được lỗi trong tiêu đề. Tôi đang thiếu gì?

+0

Bạn có đang chạy WinDbg trên máy tính Windows 8 không? Tôi nhận được thông báo lỗi tương tự chỉ trong một máy tính Windows 8. Nếu tôi đổ bộ nhớ vào một tập tin tôi không thể chạy SOS ngay cả khi tôi làm! Wow64exts.sw để chuyển sang chế độ 32-bit. Tuy nhiên, tôi có thể thực hiện SOS nếu tôi đính kèm với quá trình ... –

Trả lời

22

Tôi tin rằng bạn sẽ phải sử dụng trình quản lý tác vụ 32-bit, nằm trong C: \ Windows \ SysWOW64 \ taskmgr.exe để tải xuống 32 bit.

Thông tin thêm ở đây: http://blogs.msdn.com/b/tess/archive/2010/09/29/capturing-memory-dumps-for-32-bit-processes-on-an-x64-machine.aspx

+0

Vì vậy, không có cách nào để sử dụng bãi chứa hiện tại? –

+0

Một bình luận trong liên kết ở trên đề cập đến việc chạy! Wow64exts.sw, có thể cho phép bạn chạy các lệnh liên quan đến stack, như! Clrstack.Không bao giờ cố gắng mà bản thân mình như tôi đã có thể lấy một bãi chứa mới để thay thế. – trydis

+0

Tôi sẽ để nó mở trong một ngày hoặc lâu hơn để xem liệu có ai có câu trả lời không phải là tôi không, nếu không tôi sẽ chấp nhận cái này –

5

Tôi đã luôn luôn đi theo sự giới thiệu của các khớp bitness nhưng không bao giờ biết chính xác lý do tại sao cho đến khi tôi đi qua bài viết này: http://blogs.msdn.com/b/dotnet/archive/2013/05/01/net-crash-dump-and-live-process-inspection.aspx trong đó nêu:

"The DAC có một giao diện chuẩn hóa và được trình gỡ lỗi sử dụng để có được thông tin về trạng thái của các trừu tượng đó, ví dụ: vùng được quản lý. bạn muốn kiểm tra. "

"Lưu ý rằng DAC là một DLL gốc và phải được nạp vào chương trình sử dụng ClrMD. Nếu các bãi chứa hoặc quá trình sống là 32-bit, bạn phải sử dụng phiên bản 32 bit của DAC, điều này có nghĩa là chương trình kiểm tra của bạn cũng cần phải có 32 bit. đang gỡ lỗi. "

2

Có một tùy chọn khác phù hợp với tôi: - Tôi đã gặp sự cố với quá trình 64 bit. - Vì vậy, trước tiên, tôi cần SOS.dll và mscordacwks.dll từ máy (C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319) trong đó bãi chứa được lấy. ! - Dựa trên hai bài báo MSDN (http://msdn.microsoft.com/en-gb/library/windows/hardware/ff562263%28v=vs.85%29.aspx, http://msdn.microsoft.com/en-gb/library/windows/hardware/ff540665%28v=vs.85%29.aspx), tôi nạp CLR theo cách này:

.cordll -u -ve -I clr -lp <path to SOS.dll & mscordacwks.dll> 

Sau này, chủ đề làm việc. Tôi nghĩ rằng, tương tự nên áp dụng cho bãi tai nạn 32-bit.

8

Như những người khác đã nói, điều này có thể do ứng dụng 64 bit (ví dụ như Trình quản lý tác vụ mặc định) tạo tệp kết xuất của quy trình 32 bit.

Tôi đã có thể giải quyết sự cố bằng cách sử dụng phần mở rộng soswow64 WinDbg từ poizan42 on GitHub. Tôi đã tìm thấy nó thông qua this blog entry, cũng cung cấp một số thông tin chi tiết hơn về vấn đề này.

+0

Tôi chắc rằng đây sẽ là câu trả lời ngay bây giờ, nhưng tôi có thể là một chút thiên vị;) – poizan42

+0

@ poizan42 Cảm ơn rất nhiều vì soswow64, nó đã làm cho công việc của tôi dễ dàng hơn rất nhiều! –

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