2012-06-20 39 views
38

Tôi nhận được sự cố như vậy trong trình gỡ lỗi và chương trình ngừng thực thi. Trình gỡ lỗi không hiển thị cho tôi dòng vì vậy tôi không biết phải sửa lỗi gì.cách khắc phục sự cố "System.AggregateException" xảy ra trong mscorlib.dll "

Một ngoại lệ unhandled của loại 'System.AggregateException' xảy ra ở mscorlib.dll

thông tin bổ sung: Một của công tác ngoại lệ (s) không được quan sát một trong hai bởi Chờ trên Task hoặc truy cập thuộc tính ngoại lệ của nó . Theo kết quả , ngoại lệ không được giám sát đã bị gỡ bỏ bởi chuỗi kết thúc.

Không thể nhận giá trị của địa phương hoặc đối số '' vì nó không phải là có sẵn tại chỉ dẫn này, có thể vì nó đã được tối ưu hóa. System.Threading.Tasks.TaskExceptionHolder

Làm cách nào để khắc phục sự cố của tôi?

Tôi cũng thấy câu hỏi này là khá tương tự Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away

+0

Tôi bằng cách nào đó đã gây ra sự cố này khi ứng dụng bảng điều khiển không có vấn đề trước đó bị gián đoạn trong khi chạy gỡ lỗi. Đóng Visual Studio và sau đó mở lại nó giải quyết vấn đề và sau đó chạy ok - điều này sẽ không giúp đỡ trong mọi trường hợp nhưng đáng thử nếu ứng dụng 'nên' làm việc ok. –

Trả lời

42

Như thông báo cho biết, bạn có một nhiệm vụ mà ném một ngoại lệ unhandled.

Bật Break on All Exceptions (Gỡ lỗi, Ngoại lệ) và chạy lại chương trình.
Điều này sẽ hiển thị cho bạn ngoại lệ ban đầu khi nó được ném ở địa điểm đầu tiên.


(chú thích được thêm): Trong VS2015 (hoặc cao hơn). Chọn Gỡ lỗi> Tùy chọn> Gỡ lỗi> Chung và bỏ chọn tùy chọn "Chỉ bật mã của tôi".

+2

Cài đặt này ở đâu? Gỡ lỗi> Ngoại lệ> ...? – mdupls

+3

@mdupls: Chia nhỏ tất cả ngoại lệ CLR. – SLaks

+1

chỉ cần kiểm tra tất cả. Sau đó, sử dụng "Đặt lại tất cả" để quay lại giá trị mặc định. –

9

Bạn có thể xử lý ngoại lệ trực tiếp để nó không làm hỏng chương trình của bạn (bắt số AggregateException). Bạn cũng có thể nhìn vào Exception Nội, điều này sẽ cung cấp cho bạn một lời giải thích chi tiết hơn về những gì đã xảy ra:

try { 
    // your code 
} catch (AggregateException e) { 

} 
+2

Nhưng làm thế nào để giải quyết vấn đề một cách dứt khoát? –

+0

Nói chung, bạn sẽ muốn ứng dụng gặp sự cố nếu xảy ra sự cố. Giải quyết vấn đề nguồn thay vì bắt tất cả các ngoại lệ. –

4

Câu trả lời được chấp nhận sẽ làm việc nếu bạn có thể dễ dàng tạo lại vấn đề. Tuy nhiên, như là một vấn đề của thực hành tốt nhất, bạn nên bắt bất kỳ trường hợp ngoại lệ (và đăng nhập) được thực hiện trong một nhiệm vụ. Nếu không, ứng dụng của bạn sẽ sụp đổ nếu có bất kỳ điều gì bất ngờ xảy ra trong công việc.

Task.Factory.StartNew(x=> 
    throw new Exception("I didn't account for this"); 
) 

Tuy nhiên, nếu chúng tôi thực hiện việc này, ít nhất ứng dụng không bị lỗi.

Task.Factory.StartNew(x=> 
    try { 
     throw new Exception("I didn't account for this"); 
    } 
    catch(Exception ex) { 
     //Log ex 
    } 
) 
0

Trong trường hợp của tôi, tôi gặp sự cố này khi sử dụng Edge.js - tất cả vấn đề là lỗi cú pháp JavaScript bên trong định nghĩa hàm C# Edge.js.

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