Visual Studio 2015 đột phá về các ngoại lệ không được khắc phục không hoạt động

115
Ted Lowery 2015-07-22 10:31.

Visual studio từng có một hộp kiểm cụ thể để "Phá vỡ ngoại lệ chưa được xử lý". Vào năm 2015, điều này đã bị xóa (hoặc chuyển đi đâu đó mà tôi không thể tìm thấy). Vì vậy, bây giờ các dự án đã chuyển đổi của tôi không còn bị phá vỡ nếu tôi không cung cấp trình xử lý ngoại lệ cấp người dùng. Tôi không muốn phá vỡ tất cả "trường hợp ngoại lệ được ném ra" bởi vì tôi xử lý những trường hợp cụ thể. Chỉ nơi tôi không cung cấp một trình xử lý cụ thể.

Ngay bây giờ mã của tôi chỉ cần thoát khỏi quy trình hiện tại và tiếp tục thực hiện ở vị trí ngăn xếp cuộc gọi tiếp theo, KHÔNG TỐT.

Có ai biết cách lấy lại điều này trong Visual Studio 2015 không? Tôi vừa nâng cấp lên phiên bản cộng đồng ngày hôm qua.

12 answers

118
Tom Studee 2015-07-22 10:33.

Có một cửa sổ mới được gọi là "Cài đặt ngoại lệ" xuất hiện ở ngăn dưới bên phải theo mặc định khi bạn bắt đầu gỡ lỗi. Nó có tất cả các tùy chọn mà bạn mong đợi.

Bạn có thể đưa nó lên với CTRL+ ALT+E

Điều này cho phép bạn chọn ngoại lệ nào gây ra lỗi trong trình gỡ lỗi.

Tuy nhiên, điều quan trọng là bạn cũng có thể đặt xem các ngoại lệ này luôn luôn phá vỡ hay chỉ phá vỡ khi đó là một ngoại lệ chưa được xử lý - nhưng việc đặt điều này không trực quan lắm.

Trước tiên, bạn sẽ cần kiểm tra "Bật mã chỉ của tôi" trong Công cụ> Tùy chọn> Gỡ lỗi.

Sau đó, điều này cho phép bạn nhấp chuột phải vào tiêu đề cột (Break When Thrown) trong cửa sổ Cài đặt Ngoại lệ mới và thêm cột "Hành động Bổ sung", sau đó cho phép bạn đặt từng ngoại lệ là "Tiếp tục khi chưa xử lý trong mã người dùng".

Vì vậy, chỉ cần nhấp chuột phải vào một ngoại lệ hoặc toàn bộ nhóm và tắt cờ "Tiếp tục khi chưa được xử lý trong mã người dùng". Thật không may, cột "Hành động bổ sung" sẽ hiển thị trống giống như "Ngắt khi chưa xử lý trong mã người dùng".

Thêm về điều này ở đây:

http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/23/the-new-exception-settings-window-in-visual-studio-2015.aspx

36
Justin XL 2015-10-10 16:55.

Tôi đã gặp vấn đề tương tự và tôi đã giải quyết được điều này bằng cách thực hiện điều này -

  1. Nhấn Ctrl+ Alt+ eđể hiển thị cửa sổ Cài đặt ngoại lệ .
  2. Đánh dấu vào Ngoại lệ thời gian chạy ngôn ngữ chung .

Đó là nó!

Tôi đã lấy cảm hứng từ bài đăng này vì tôi đang sử dụng phiên bản x64 của Windows .

10
Olivier de Rivoyre 2015-09-03 22:27.

Đối với nhân viên googler muốn phá vỡ chỉ khi ngoại lệ liên quan đến mã của họ, có một tùy chọn trong Visual Studio 2015: Tùy chọn-> Gỡ lỗi-> Chung-> Chỉ mã của tôi. Sau khi được chọn, nó cho phép không bị phá vỡ khi ngoại lệ được quản lý (ném và bắt) bên ngoài mã của bạn.

9
oatsoda 2015-11-04 06:36.

Microsoft đã thay đổi logic một cách tinh vi trong cửa sổ ngoại lệ mới.

Xem http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/23/the-new-exception-settings-window-in-visual-studio-2015.aspx

Phần quan trọng là:

Ghi chú quan trọng

  • Cửa sổ mới này chứa tất cả các chức năng giống như hộp thoại phương thức cũ. Không có khả năng nào của trình gỡ lỗi chỉ thay đổi cách bạn có thể truy cập chúng
  • Trình gỡ lỗi sẽ luôn bị phá vỡ khi một ngoại lệ được xử lý
  • Cài đặt để thay đổi nếu trình gỡ lỗi không tuân theo các trường hợp ngoại lệ do người dùng xử lý đã di chuyển trong menu ngữ cảnh
  • Vị trí menu đã chuyển đến Gỡ lỗi -> Windows -> Cài đặt ngoại lệ

Tuy nhiên , nếu giống như tôi, bạn có Trình xử lý ngoại lệ không được xử lý toàn cầu trong mã của mình thì mục thứ hai trong danh sách đó là chìa khóa: Đối với tôi, không có ngoại lệ nào sẽ thực sự được xử lý, điều này có vẻ khác với VS2013.

Để lấy lại hành vi trong đó VS ngắt trên các ngoại lệ không được xử lý, tôi phải đánh dấu vào tất cả các loại ngoại lệ mà tôi muốn phá vỡ và sau đó đảm bảo rằng "Tùy chọn bổ sung" (bạn có thể cần hiển thị cột này *) cho "Tiếp tục khi không được xử lý trong mã người dùng " KHÔNG được đặt. Logic VS2015 dường như không coi Trình xử lý ngoại lệ không được xử lý toàn cầu của tôi là "được xử lý trong mã người dùng", vì vậy nó thực sự bị hỏng trên những điều này; Tuy nhiên, nó không phá vỡ các ngoại lệ đã bắt. Điều này làm cho nó hoạt động giống như VS2013 đã làm.

* Cách bật cột "Hành động bổ sung"

7
Dan Bryant 2015-09-16 14:04.

Nếu tôi đang đọc chính xác giữa các dòng ở đây, vấn đề là ngoại lệ của bạn đang 'biến mất' một cách hiệu quả mặc dù hành vi trình gỡ lỗi mặc định sẽ phá vỡ trên các ngoại lệ không được xử lý.

Nếu bạn có các phương thức không đồng bộ, bạn có thể gặp phải sự cố này vì các ngoại lệ không bắt được trên luồng nhóm luồng như một phần của phần tiếp tục Tác vụ không được coi là ngoại lệ chưa được xử lý. Đúng hơn, chúng được nuốt và lưu trữ cùng với Task.

Ví dụ: hãy xem mã này:

class Program
{
    static void Main(string[] args)
    {
        Test();
        Console.ReadLine();
    }

    private async static Task Test()
    {
        await Task.Delay(100);
        throw new Exception("Exception!");
    }
}

Nếu bạn chạy chương trình này với cài đặt trình gỡ lỗi mặc định (chỉ dừng ở các trường hợp ngoại lệ chưa được khắc phục), trình gỡ lỗi sẽ không bị hỏng. Điều này là do luồng nhóm luồng được phân bổ cho phần tiếp theo nuốt ngoại lệ (chuyển nó đến cá thể Tác vụ) và tự giải phóng trở lại nhóm.

Lưu ý rằng, trong trường hợp này, vấn đề thực sự là hàng Tasktrả về Test()không bao giờ được kiểm tra. Nếu bạn có các loại logic 'fire-and-forget' tương tự trong mã của mình, thì bạn sẽ không thấy các ngoại lệ tại thời điểm chúng được ném (ngay cả khi chúng được 'xử lý' bên trong phương thức); ngoại lệ chỉ hiển thị khi bạn quan sát Tác vụ bằng cách chờ nó, kiểm tra Kết quả của nó hoặc xem xét rõ ràng Ngoại lệ của nó.

Đây chỉ là phỏng đoán, nhưng tôi nghĩ có khả năng bạn đang quan sát điều gì đó như thế này.

3
Clint StLaurent 2016-05-17 02:53.

Theo kinh nghiệm của tôi, các cài đặt ngoại lệ trong năm 2015 sẽ bị loại bỏ hoàn toàn nếu bạn thay đổi bất kỳ điều gì.

Kỳ vọng rằng nếu bạn cho đến nhóm mẹ "CLR" thì bạn sẽ không nhận được bất kỳ thực thi vi phạm nào cho việc xử lý. Bạn sẽ luôn bị phá vỡ nếu một ngoại lệ không được giải quyết. Nhưng, nếu bạn chưa chọn nhóm CLR, mã bên trong try ... catch đơn giản sẽ không gây ra lỗi. Đó không phải là tình huống.

Giải pháp: Trong hộp công cụ cài đặt ngoại lệ mới, nhấp chuột phải và chọn "khôi phục mặc định". Taadaaaa ... Nó hoạt động bình thường trở lại. Bây giờ đừng làm phiền nó.

1
Andrei 2015-09-08 04:22.

Hãy thử làm theo hướng dẫn:

  1. Trong cửa sổ Cài đặt Ngoại lệ, mở menu ngữ cảnh bằng cách bấm chuột phải vào cửa sổ, sau đó chọn Hiển thị Cột. (Nếu bạn đã tắt Just My Code, bạn sẽ không thấy lệnh này.)
  2. Bạn sẽ thấy cột thứ hai có tên Hành động bổ sung. Cột này hiển thị Tiếp tục khi được mã người dùng xử lý theo các ngoại lệ cụ thể, có nghĩa là trình gỡ lỗi không bị hỏng nếu ngoại lệ đó không được xử lý trong mã người dùng mà được xử lý trong mã bên ngoài.
  3. Bạn có thể thay đổi cài đặt này cho một ngoại lệ cụ thể (chọn ngoại lệ, nhấp chuột phải và chọn / bỏ chọn Tiếp tục khi chưa được xử lý trong Mã người dùng) hoặc cho toàn bộ danh mục ngoại lệ (ví dụ: tất cả các ngoại lệ Thời gian chạy ngôn ngữ chung).

https://msdn.microsoft.com/en-us/library/x85tt0dd.aspx

1
cedd 2015-10-20 23:44.

Tất cả đều hơi khó hiểu và theo ý kiến ​​của tôi là không tốt bằng hộp thoại ngoại lệ cũ, nhưng dù sao.

Nếu một ngoại lệ nằm trong danh sách và được đánh dấu thì trình gỡ lỗi sẽ phá vỡ bất cứ khi nào ngoại lệ được ném ra.

Nếu một ngoại lệ không được chọn hoặc không có trong danh sách thì trình gỡ lỗi sẽ chỉ phá vỡ khi loại ngoại lệ đó được người dùng xử lý.

Ví dụ: trong ảnh chụp màn hình bên dưới, trình gỡ lỗi sẽ phá vỡ bất cứ khi nào a System.AccessViolationExceptionđược ném ra, nhưng đối với tất cả các ngoại lệ khác, nó sẽ chỉ phá vỡ nếu ngoại lệ đó không được người dùng xử lý.

1
J.Wyckoff 2016-06-04 09:19.

Khi tôi nâng cấp lên VS2015, tôi cũng gặp vấn đề trong đó các ngoại lệ được sử dụng để "phá vỡ" ứng dụng, nhưng hiện đã được bỏ qua và chuyển ngay. Đôi khi chúng ta muốn mã của mình cố ý ném các ngoại lệ vào những nơi mà chúng ta muốn mã dừng lại, thay vì tiếp tục. Chúng tôi luôn sử dụng cụm từ Throw New Exception("Message")lấy mã của mình để cố tình phá vỡ:

    If SomethingReallyBad = True Then
        Throw New Exception("Something Really Bad happened and we cannot continue.")
    End If

Với VS2015, "System.Exception" cổ điển là những gì được đưa ra khi chúng ta nói Throw New Exception. Do đó, chúng tôi cần kiểm tra đánh dấu "System.Exception" trong Cài đặt ngoại lệ mới:

Kiểm tra hộp System.Exception

Sau khi kiểm tra, mã của chúng tôi đã hoạt động như mong đợi.

1
Simon Sanderson 2017-02-24 16:49.

Giải pháp là về mặt ngữ nghĩa, điều này ngược lại với những gì bạn nghĩ rằng bạn đang thiết lập. Bạn cần đảm bảo rằng Tiếp tục khi unhandled trong mã người dùng được không được kích hoạt tức là không được chọn như hình dưới Actions bổ sung cột trong các thiết lập ngoại lệ tab - xem dưới đây:

bạn đang nói một cách hiệu quả là không tiếp tục (tức là ngắt) khi không được xử lý trong mã

Để làm điều này:

  1. Nhấp chuột phải vào ngoại lệ hoặc tập hợp các ngoại lệ mà bạn quan tâm (tức là thường là dòng trên cùng 'Ngoại lệ thời gian chạy ngôn ngữ chung' trong cây)
  2. Chọn tùy chọn Tiếp tục khi chưa được xử lý trong Mã người dùng (xem bên dưới)
  3. Đảm bảo rằng các ngoại lệ không được chọn (xem bên dưới)
  4. tiếp tục gỡ lỗi

Điều đó đã làm điều đó cho tôi - hạnh phúc một lần nữa.

Đây là trong VS 2015

0
Simon_Weaver 2015-09-25 12:22.

Chắc chắn có một số lỗi trong Visual Studio có thể khiến nó bị kẹt và yêu cầu khởi động lại. Ngay cả VS2015.

Tôi đã gặp một tình huống chuỗi đơn trong đó a NullReferenceExceptionđang bị bắt bởi một trình xử lý 'bên ngoài' (vẫn còn trong mã của tôi) mặc dù tôi đã yêu cầu nó phá vỡ khi nó được nâng lên.

Tôi nhận ra đây là một ngoại lệ 'đã xử lý' và bạn đang nói một ngoại lệ 'chưa được xử lý' - tuy nhiên tôi khá chắc chắn rằng đôi khi khởi động lại nhanh VS sẽ khắc phục được điều này, nếu IISRESET không.

0
Moses 2018-10-30 02:25.

Visual Studio 2017 hoạt động tốt với việc xử lý lỗi. Mặt khác, Visual Studio 2015 khó xử lý lỗi với các tác vụ vì trong chế độ gỡ lỗi, tất cả các trường hợp ngoại lệ xảy ra trong tác vụ không đồng bộ đều bị bắt nhưng nếu tôi bước qua nó sẽ bị treo vô thời hạn. Nếu được thực thi mà không gỡ lỗi, nó sẽ treo vô thời hạn mà không có ngoại lệ nào bị bắt !!! Tôi yêu thích studio trực quan và đã sử dụng nó từ năm 1995 và năm 2015 là phiên bản tồi tệ hơn cho đến nay mặc dù tôi đã chuyển trực tiếp từ năm 2010 sang năm 2015. Tôi đã dành 8 giờ để cố gắng xử lý ngoại lệ này nhưng không thành công. Tôi đã sao chép mã chính xác sang 2017 trên máy tính tại nhà của mình và nó hoạt động hoàn hảo. Tôi rất khó chịu vì Microsoft đã đẩy các tác vụ vào một khuôn khổ mà trình biên dịch năm 2015 không thể xử lý chính xác.

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Làm thế nào để xây dựng một quả địa cầu từ Scratch

Làm thế nào để xây dựng một quả địa cầu từ Scratch

Thời gian, sự kiên nhẫn, thời gian, sự cống hiến và thời gian chỉ là một vài trong số những thứ mà Peter Bellerby cần để thành lập và sau đó điều hành Bellerby & Co. Globemakers, một trong những công ty duy nhất trên Trái đất vẫn sản xuất các quả địa cầu bằng tay.

Năm giai đoạn đau buồn sau khi mất việc làm

Năm giai đoạn đau buồn sau khi mất việc làm

Đó là một ngày thứ Bảy, máy bay của tôi hạ cánh, và tôi đã sẵn sàng để thư giãn trong một kỳ nghỉ cuối tuần ngắn ngủi, khi một email đến trên điện thoại của tôi. Tôi đã mất việc.

Giữ an toàn cho danh tính của bạn với một cảnh báo đóng băng hoặc gian lận tín dụng

Giữ an toàn cho danh tính của bạn với một cảnh báo đóng băng hoặc gian lận tín dụng

Nếu bạn đã từng bị đánh cắp danh tính của mình, bạn biết đó là một trải nghiệm đáng sợ và căng thẳng. Một cách không phổ biến để ngăn chặn nó? Tín dụng bị đóng băng.

Buổi ra mắt phần 3 của The Good Place có một học sinh mới: Khán giả

Buổi ra mắt phần 3 của The Good Place có một học sinh mới: Khán giả

Eleanor (Kristen Bell) dường như đã tình nguyện cho chúng tôi làm vật tưởng nhớ. NBC's The Good Place là một chương trình thích thử thách tốt.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language