2010-03-04 23 views
39

Có công cụ phân tích mã .NET và tìm các điều kiện chủng tộc không?Công cụ phân tích C# /. NET để tìm các điều kiện chủng tộc/deadlocks

Tôi có một chút mã có thuộc tính tĩnh công khai nhận hoặc tạo trường tĩnh riêng tư. Nó cũng có một phương thức tĩnh công cộng để thiết lập trường này thành null (... vâng, tôi biết! ..)

Vì không có khóa nào xung quanh một trong các phương pháp này, sai trong tương lai. Tôi cần một công cụ sẽ đệ quy thông qua những thứ gọi một trong hai phương pháp này và xem liệu có bất cứ thứ gì được sinh ra trên một luồng khác hay không.

Tôi đang tìm một công cụ hoặc có thể là tập lệnh SQL nDepend (nếu có thể).

+8

oooh, thực sự hữu ích ở đó, ý của bạn là e của tất cả những quảng cáo xoay quanh? Nó có thể sẽ giúp rất nhiều nếu bạn nói * đó * quảng cáo, hoặc chỉ đề cập đến sản phẩm hoặc công ty nó là một quảng cáo cho. Hay đó chỉ là "nếu bạn nhìn vào trang web ..."? –

Trả lời

19

Bạn đang có lẽ tìm kiếm một trong những:


LƯU Ý: Câu trả lời này là từ năm 2010. Như với tất cả các khuyến nghị câu trả lời, đề xuất có xu hướng thay đổi theo thời gian. Hiện tại có thể có các sản phẩm khác, CHESS là dự án của Phòng thí nghiệm Nghiên cứu của Microsoft có thể đã phát triển thành một sản phẩm cuối cùng hoặc bị loại bỏ hoàn toàn. Hãy lấy câu trả lời này với một hạt muối và tiến hành nghiên cứu mới về những sản phẩm nào phù hợp ngay bây giờ.

+0

Cảm ơn Lasse, Tôi đã nghe nói về CHESS nhưng không phải là TypeMock Racer. Tôi đã thực sự tìm kiếm một công cụ phân tích tĩnh mã. Tôi đang sử dụng ReSharper 5 trong đó có một tính năng tốt đẹp mà kiểm tra mã và cho thấy tất cả người gọi của một phương pháp cụ thể và khoan qua chúng đệ quy. Những gì tôi cần là cái gì đó đã gắn cờ một phương thức như được khởi tạo trên một chuỗi công nhân. Tôi sẽ đầu tư nhiều hơn vào cách tiếp cận CQL, như tôi biết có một kịch bản người gọi ngược dòng, vì vậy tôi chắc chắn có một cách để tìm ra nếu bất kỳ phương pháp nào là kết quả của một cuộc gọi lời gọi thread. –

+0

[nĩa cờ vua] (https://github.com/LeeSanderson/Chess) dường như được cập nhật và hoạt động. – zejuel

3

Bạn có thể muốn xem CHESS.

4

Jinx sẽ thực hiện việc này khi chạy (không tĩnh) nhưng có thể đáng xem.

+0

Đẹp. Phân tích thời gian chạy vượt trội so với phân tích tĩnh về các vấn đề tương tranh. Có quá nhiều quy ước thời gian chạy cho các máy phân tích tĩnh để tạo ra một tỷ số tín hiệu trên nhiễu tốt. –

+0

trông giống như Jinx là bánh mì nướng. – tofutim

+0

Wikipedia: Jinx là một trình gỡ lỗi đồng thời xác định kiểm soát việc xen kẽ khối lượng công việc trên các lõi bộ xử lý, tập trung vào các tương tác bộ nhớ chia sẻ. Sử dụng phương pháp xác định này, Jinx nhằm tăng tần suất xuất hiện các lỗi bộ nhớ chia sẻ khó nắm bắt, đôi khi được gọi là Heisenbugs. Jinx không còn nữa. Corensic, công ty phát triển Jinx, được F5 Networks mua lại và dự án Jinx đã bị hủy bỏ. – tofutim

0

Bạn đã xem Red-Gate Ants chưa? Tôi không chắc chắn nếu nó sẽ làm tất cả mọi thứ bạn cần, nhưng nó là một sản phẩm tốt để:

  • Xác định thắt cổ chai trong vòng vài phút
  • Optimize hiệu suất ứng dụng .NET
  • khoan xuống để làm chậm dòng mã với timings dòng cấp
  • Hồ sơ aspx, ASP.NET, C# mã, và VB.NET ứng dụng
2

Tôi đã thử nghiệm cách dễ dàng theo dõi chúng. Tôi đã làm việc để theo dõi một số deadlocks, đặc biệt là trên các kịch bản mà nhiều báo cáo khóa khác nhau được sử dụng.

Mục tiêu của tôi là phát hiện deadlocks trước khi chúng xảy ra, ví dụ: nếu bạn có hai tài nguyên, bạn biết bạn phải luôn sử dụng chúng theo thứ tự như nhau, nếu không, bế tắc có thể xảy ra.

lock (lockObj1) 
lock (lockObj2) 
{ 
    // some code 
} 

...ở một nơi khác trong ứng dụng ...

lock (lockObj2) 
lock (lockObj1) // <- I expect some "possible deadlock" detection here 
{ 
    // some code 
} 

Trong trường hợp này tôi đang sử dụng lockObj1 sau đó lockObj2 ở một nơi và sử dụng chúng theo thứ tự ngược lại ở một nơi khác, đây là một cái gì đó bạn sẽ muốn tránh trong một ứng dụng Tất nhiên, các câu lệnh khóa không cần được sử dụng cái khác như trong ví dụ, ứng dụng phức tạp của bạn có thể có một số đối tượng phức tạp tương tác với nhau

Tôi đã tải mã lên với trường hợp kiểm tra tại đây https://github.com/glmnet/LockTracer

+2

Đây là một ý tưởng rất thú vị. Lấy cảm hứng từ mã của bạn Tôi đã viết một cái gì đó tương tự, chỉ định một "số ưu tiên" cho mỗi khóa, và sau đó kiểm tra xem có khi nào tôi có nhiều ổ khóa mà tôi đã nhận chúng trong "thứ tự ưu tiên" hay không. Chắc chắn, ngay lập tức tiết lộ rằng có một nơi trong chương trình của tôi, nơi tôi đã phá vỡ quy tắc của riêng tôi về thứ tự mua lại khóa, và sửa chữa mà cố định lỗ hổng bế tắc của tôi. – RenniePet

+1

Điều đó có vẻ đơn giản hơn nhưng hiệu quả! Bạn có thể chia sẻ nó trên GitHub? Đừng quên để upvote nếu bạn không. Cảm ơn! –