2010-03-18 22 views
5

Chúng tôi có lỗi này chỉ xuất hiện 30% thời gian cho bản dựng. Mở đổ sụp đổ trong WinDbg (snipped đầu ra "analyze -v!"):.NET Debugging - System.Threading.ExecutionContext.runTryCode

FAULTING_IP: 
+4 
00000000`00000004 ??    ??? 

EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff) 
ExceptionAddress: 0000000000000004 
    ExceptionCode: c0000005 (Access violation) 
    ExceptionFlags: 00000000 
NumberParameters: 2 
    Parameter[0]: 0000000000000008 
    Parameter[1]: 0000000000000004 
Attempt to execute non-executable address 0000000000000004 
ERROR_CODE: (NTSTATUS) 0xc0000005 - 
    The instruction at 0x%08lx referenced memory at 0x%08lx. 
    The memory could not be %s. 
WRITE_ADDRESS: 0000000000000004 
MANAGED_STACK: 
(TransitionMU) 
0000000024B9E370 000007FEEDA1DD38 
    mscorlib_ni! 
    System.Threading.ExecutionContext.runTryCode(System.Object)+0x178 
(TransitionUM) 
(TransitionMU) 
0000000024B9DFB0 000007FF00439010 MyLibrary!DocInfo.IsStatusOK()+0x30 

Bây giờ, IsStatusOK() chỉ gọi PrintSystemJobInfo.Get(), nhưng điều đó dường như không còn xuất hiện trong ngăn xếp.

Bất kỳ ý tưởng nào về cách gỡ lỗi này? Tôi chắc rằng runTryCode() thực sự không phải là vấn đề ... nhưng ... tôi bị kẹt.

Cảm ơn! (Tôi thực sự mò mẫm ở đây).

+0

Vì chưa có ai trả lời sau một giờ, tôi khuyên bạn nên cố gắng liên hệ với ai đó tại http://blogs.msdn.com/ntdebugging/. Đối với những gì nó có giá trị, tôi giả định rằng một con trỏ đến một thủ tục nên được thông qua vào runTryCode. Đối với một số lý do, con trỏ đó đã tranh giành (ghi đè?) Và chứa 000 ... 4. Có lẽ bạn có thể tìm ra quy trình nào nên được gọi và làm việc từ đó để tìm ra ai đã ghi đè địa chỉ cụ thể đó. –

+0

Bạn luôn nhận được kết xuất đổ vỡ chính xác này? Một phần của vấn đề với việc gỡ rối vi phạm quyền truy cập là chúng có thể là tác dụng phụ của một số mã khác * không * bị lỗi nhưng quyết định viết nguệch ngoạc trên mọi bộ nhớ * đã bị lỗi (thường được chứng minh bằng các sự cố không liên tục và không nhất quán) ngăn xếp dấu vết). – Aaronaught

Trả lời

0

Cảm ơn mọi người! Cuối cùng đã tìm ra.

Có một số tương tác gốc xuất hiện ở đây và GC dường như di chuyển xung quanh một số biến trong bộ nhớ. Đây là một trong đó là tàn phá ở phía Interop. Giải pháp: Sử dụng IntPtr hoặc GCHandle.Alloc()

(thừa nhận, câu trả lời này được viết vội vàng, sẽ cố gắng điền vào một câu trả lời đúng khi tôi có thời gian).

+0

moogs bạn đã viết câu trả lời trong vội vàng, bạn có thể vui lòng viết một câu trả lời thích hợp và mô tả về giải pháp bạn đã triển khai cách bạn sử dụng IntPtr và GCHandle.Alloc – dbw

0

Một đâm trong bóng tối - nhưng nhìn thấy vì nó có thể liên quan đến in ấn, nó có thể được gây ra bởi một trình điều khiển máy in tinh vi?

Sự cố có xảy ra trên các máy khác nhau hoặc chỉ những vấn đề cụ thể không?

0

Vi phạm quyền truy cập phải đến từ mã gốc, do đó, các cơ sở dữ liệu đi xuống có lỗi hoặc điều gì đó về định nghĩa có thể là. Bạn có p-gọi đến phương thức gọi gốc hoặc gửi datastructures đến các phương thức được quản lý khác gọi các phương thức native?

Vì có luồng được đề cập là mã này chạy đa luồng chưa? Có thể bạn có một vấn đề luồng nơi mà các datastructures bạn đang sử dụng để nói chuyện với mã nguồn gốc đang bị hỏng bởi các chủ đề khác?