2015-07-15 44 views
9

Hôm nay tôi đã gỡ lỗi một ứng dụng trong tác phẩm của mình. Tôi tiến hành thiết lập một điểm dừng trong một trong các khối catch của tôi để kiểm tra một ngoại lệ với nhiều chi tiết hơn.

Cửa sổ View Detail phương thức mở bình thường, nhưng thay vì hiển thị cho tôi các chi tiết của ngoại lệ, nó được ném một lỗi lạ, một tôi không bao giờ, cũng không phải tôi biết ý nghĩa của nó:

View Details Exception

các lỗi nói:

tên '$ ngoại lệ' không tồn tại trong bối cảnh hiện nay

Điều này gây thất vọng vì tôi nằm trong phạm vi khối catch, vì vậy tôi có thể thấy ngoại lệ của mình.

Sau khi khởi động lại ứng dụng của mình, tôi đã quản lý để gỡ lỗi nó tốt. Đây là lần duy nhất (cho đến nay) tôi nhận được lỗi này.

Có ai biết ý nghĩa của nó không và cách khắc phục (không phải khởi động lại ứng dụng)?

LƯU Ý: Tôi đang sử dụng Visual Studio 2012 Premium. Version 11.0.61030.00 Cập nhật 4

+0

$ ngoại lệ trông giống như một cái gì đó trong javascript, C# sẽ không có $ trước nó, bạn có thể xác minh rằng các tập tin JS của bạn không phải là những người ném lỗi? –

+0

@RonBeyer Ứng dụng này không xử lý JS. Nó hoàn toàn được viết bằng C#, và bạn cũng có thể thấy rằng kiểu ngoại lệ là 'System.Net.Http.HttpRequestException' là một ngoại lệ .NET –

+5

' $ exception' là một trình gỡ rối cho "ngoại lệ hiện tại". Đôi khi một số bit được lật không có lý do và trình gỡ rối ngừng hoạt động, điều đó xảy ra. – CodeCaster

Trả lời

0

Có một cái nhìn tại thư viện MSDN của: https://msdn.microsoft.com/en-us/library/ms164891.aspx

Theo họ, bạn sẽ nhận được một ngoại lệ nếu bạn cố gắng để đánh giá một đối tượng ngoại lệ nếu không phải ngoại lệ đã xảy ra. Nhưng, kể từ khi bạn đang ở trong khối catch, một excption đã xảy ra ... Nếu không thấy mã của bạn thật khó đoán, nhưng có thể bạn có nhiều luồng đang chạy, và ngoại lệ được tiêu thụ bởi một luồng trước khi được xử lý Bởi một người khác? Không thực sự có ý nghĩa nhưng nó đáng xem. Một tùy chọn an toàn (r) sẽ là để đảm bảo bạn kiểm tra xem trường hợp ngoại lệ là null trong logger của bạn, trước khi cố gắng để có được chi tiết từ nó. Cũng đáng xem: Các HttpRequestException có chứa một ngoại lệ bên trong, mà có thể là nguồn gốc của tài liệu tham khảo null của bạn? Chỉ cần suy đoán.

0

Tôi đồng ý với trapsuutjies, có thể không có ngoại lệ. Để ngăn chặn lỗi này, nhấn Ctrl + Alt + E, mở rộng Managed Debugging Assistant và bỏ chọn LoadFromContext.

0

Khi tôi thấy lỗi này, tôi cũng nhận được lỗi 'Không thể đánh giá biểu thức' trong trình gỡ lỗi. Đó là đưa tôi đến bài này bởi Rick Strahl mà nói đó là một lỗi trong phiên bản gốc của Visual Studio 2013.

https://weblog.west-wind.com/posts/2013/Nov/21/Visual-Studio-2013-Could-not-evaluate-Expression-Debugger-Abnormality

Khi tôi kiểm tra máy tôi đang trên, nó trong thực tế đã có VS2013 mà không cần bất kỳ các bản cập nhật đã được cài đặt. Cài đặt các bản cập nhật đã khắc phục sự cố.

1

Hãy thử cho trình biên dịch biết cách nhập dll.Ví dụ:

using System; 
using System.Runtime.InteropServices; 

namespace BitmapProcessingCs 
{ 
    public static class NativeMethods 
    { 
     [DllImport("BitmapProcessingCpp.dll", CallingConvention = CallingConvention.Cdecl)] 
     public static extern void GenerateBitmap(IntPtr src, int dimension); 
    } 
} 
0

tôi giải quyết cùng một vấn đề trong các bước sau:

bước 1) Nếu bạn chương trình DLL tùy chỉnh của bạn trong C++ sử dụng Visual studio, sau đó tại trang tài sản của dự án của bạn thiết lập các thông số Common Language Runtime Support (/clr) đến Common Language Runtime Support (/clr).

bước 2) Để hoạt động giảm tốc trong .h sử dụng tập tin __declspec(dllexport) từ khóa như dưới đây:

__declspec(dllexport) double Sub(int a,int b); 

bước 3) Xây dựng và tập tin DLL xuất khẩu, sau đó sử dụng Dependency Walker phần mềm để có được chức năng của bạn EntryPoint.

step4) nhập tập tin DLL Trong C# dự án và thiết lập EntryPointCallingConvention biến như dưới đây:

[DllImport("custom.dll", EntryPoint = "[email protected]@[email protected]", CallingConvention = CallingConvention.Cdecl)] 

    public static extern double Sub(int a,int b); 
Các vấn đề liên quan