2010-07-27 23 views
17

Với sự hỗ trợ gỡ lỗi dump trong .NET 4.0, chúng ta đang tìm kiếm tự động (sau khi yêu cầu người dùng) tạo ra minidumps của chương trình C# treo lên để tải chúng lên hệ thống theo dõi vấn đề của chúng ta (để minidumps có thể hỗ trợ giải quyết nguyên nhân) của vụ tai nạn).Giảm kích thước của minidumps của chương trình quản lý trong khi vẫn giữ một số thông tin heap?

Mọi thứ đều hoạt động tốt khi sử dụng loại minidump WithFullMemory. Chúng ta có thể thấy cả hai biến stack và heap. Thật không may các bãi (nén) là khá lớn ngay cả đối với các chương trình C# nhỏ.

Nếu chúng tôi sử dụng loại minidump "Bình thường", chúng tôi nhận được một kết xuất rất nhỏ, nhưng thậm chí không có thông tin biến ngăn xếp có sẵn trong trình gỡ lỗi được quản lý. Trong thực tế, bất cứ điều gì ít hơn WithFullMemory có vẻ khá vô dụng trong trình gỡ lỗi được quản lý. Chúng tôi đã thực hiện một vài nỗ lực khi sử dụng MINIDUMP_CALLBACK_ROUTINE để giới hạn thông tin mô-đun được bao gồm cho các mô-đun của riêng mình, nhưng có vẻ như hầu như không ảnh hưởng đến kết xuất được quản lý nhưng vẫn quản lý để gỡ lỗi được quản lý?

Có ai có bất kỳ mẹo nào về cách cắt lỗ nhỏ trong khi vẫn giữ nó hữu ích để gỡ lỗi được quản lý không?

Trả lời

0

ClrDump có thể giúp bạn.

ClrDump là bộ công cụ cho phép sản xuất các minidumps nhỏ của ứng dụng được quản lý. Trước đây, cần sử dụng các bãi chứa đầy đủ (kích thước rất lớn) nếu bạn cần thực hiện phân tích sau giết mổ của một ứng dụng .NET. ClrDump có thể sản xuất minidumps nhỏ có chứa đủ thông tin để khôi phục các ngăn xếp cuộc gọi của tất cả các chủ đề trong ứng dụng .

1

Chỉ cần fyi, như đã đề cập ở trên ClrDump trông rất tuyệt nhưng dường như nó chỉ hoạt động với 1.1. và 2,0 runtimes.

1

Với tất cả sự tôn trọng, tôi mạnh mẽ khuyến khích bạn đăng ký tài khoản Microsoft WinQual, đăng ký các ứng dụng của bạn với Microsoft.

http://www.microsoft.com/whdc/winlogo/maintain/StartWER.mspx

này sẽ cho phép bạn không chỉ tận dụng lợi thế của dịch vụ thu thập và phân tích vụ tai nạn mở rộng của Microsoft (miễn phí!), Nhưng cũng sẽ cho phép bạn xuất bản các bản sửa lỗi và bản vá lỗi cho các ứng dụng của bạn thông qua built- Windows trong báo cáo lỗi facilties.

Hơn nữa, bằng cách tham gia chương trình WinQual, các doanh nghiệp triển khai ứng dụng của bạn và sử dụng hệ thống báo cáo lỗi trong Windows sẽ có thể thu thập, báo cáo và nhận bản vá cho ứng dụng của bạn.

Một lợi ích khác là sử dụng WinQual, bạn tiến một bước gần hơn để nhận được biểu tượng ứng dụng của mình được chứng nhận!

Mỗi OEM & ISV Tôi đã làm việc với những người sử dụng WinQual sẽ tiết kiệm được lượng công sức và chi phí ENORMOUS so với hệ thống thu thập và báo cáo sự cố của chính họ.

+0

Nhiều như tôi hỗ trợ WinQual: Microsoft vẫn có danh tiếng không tốt với nhiều người dùng về quyền riêng tư. Tôi biết hàng tấn những người sẽ không bao giờ, bao giờ gửi một trong những bãi đổ nát đó trong khi họ vui vẻ gửi chúng trực tiếp đến nhà phát triển. Đôi khi, Emotion trumps Arguments và và lăn bộ sưu tập tai nạn của riêng bạn là con đường để đi. Nhưng điều đó phụ thuộc vào đối tượng mục tiêu của ứng dụng. –

+0

1) Hầu hết mọi người không quan tâm đủ để có một ý kiến ​​về danh tiếng của Microsoft 2) Nhiều người dùng muốn gửi một vụ tai nạn cho Microsoft hơn là một công ty/thực thể mà họ không nhận ra, biết hoặc tin tưởng. 3) Rất nhiều phần mềm độc hại rà soát dữ liệu người dùng bằng cách bật lên một thông báo cảnh báo mà người dùng truy cập và sau đó cho phép UAC. Điều tiếp theo họ biết, máy của người dùng sẽ không khởi động vì chúng hiện đang bị nhiễm phần mềm độc hại đã cài đặt. 90% thời gian, tốt hơn là hỗ trợ cơ sở hạ tầng báo cáo lỗi tích hợp của hệ điều hành. –

+0

Cảm ơn bạn đã đề xuất, nhưng WinQual không phù hợp với chúng tôi. – Ziphnor

3

tôi sử dụng những lá cờ sau để tiết kiệm không gian sẽ tạo minidumps hữu ích cho các ứng dụng C++:

MiniDumpWithPrivateReadWriteMemory | 
      MiniDumpWithDataSegs | 
      MiniDumpWithHandleData | 
      MiniDumpWithFullMemoryInfo | 
      MiniDumpWithThreadInfo | 
      MiniDumpWithUnloadedModules 

Cờ giá trị được quy định tại DbgHelp.h và sẽ cần phải được marshaled vào C#. Các bãi chứa được hạn chế hơn nữa bằng cách xác định một CallbackRoutine.

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