2011-07-20 26 views
9

Tôi đã có mã đơn giản sau đây:Tại sao Visual Studio không cho phép tôi bước vào Type.GetType()?

class Program 
{ 
    static void Main(string[] args) 
    { 
     var t = Type.GetType("System.Reflection.Assembly"); 

     Console.WriteLine(t.FullName); 
    } 
} 

Tôi đang cố gắng để gỡ lỗi vào phương pháp Type.GetType(), nhưng bỏ qua debugger qua phương pháp này ngay cả khi sử dụng "Step Into". Tôi đã gỡ lỗi được kích hoạt cho các lớp .NET Framework, và gỡ lỗi vào các phương thức khung công tác khác hoạt động tốt. Tại sao trình gỡ rối không cho phép tôi bước vào phương pháp cụ thể này?

Trả lời

8

Vì Type.GetType() được inlined này:

[MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical] 
public extern Type GetType(); 

Nói cách khác, phương pháp này được thực hiện trong C++ bên trong CLR. Giá trị thuộc tính InternalCall là khóa. Mã nguồn cho CLR không có sẵn từ Nguồn tham chiếu. Bạn có thể sử dụng SSCLI20 source code để tham khảo, nó là một kết hợp khá tốt cho nguồn CLR nhưng bạn không thể tin tưởng nó là hoàn toàn chính xác, nó không còn được duy trì nữa. Tệp mã nguồn clr/src/vm/ecall.cpp chứa các ánh xạ từ tên InternalCall đến tên hàm C++.

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