2008-12-12 19 views

Trả lời

9

Trả lời: Sử dụng PostSharp (Chính sách Injection), thuộc tính XTraceMethodBoundary, ghi đè OnException. này ghi lại tất cả các kiểu phương thức nhập và trả về các kiểu và giá trị tham số. Tôi đã sửa đổi PostSharp để thêm một phương thức đơn giản để ghi lại các tham số. không hoàn hảo nhưng đủ tốt

private static void TraceMethodArguments(MethodExecutionEventArgs eventArgs) 
{ 
    object[] parameters = eventArgs.GetReadOnlyArgumentArray(); 

    if (parameters != null) 
    { 
     string paramValue = null; 
     foreach (object p in parameters) 
     { 
      Type _type = p.GetType(); 
      if (_type == typeof(string) || _type == typeof(int) || _type == typeof(double) || _type == typeof(decimal)) 
      { 
       paramValue = (string)p; 
      } 
      else if (_type == typeof(XmlDocument)) 
      { 
       paramValue = ((XmlDocument)p).OuterXml; 
      } 
      else 
      { //try to serialize 
       try 
       { 
        XmlSerializer _serializer = new XmlSerializer(p.GetType()); 
        StringWriter _strWriter = new StringWriter(); 

        _serializer.Serialize(_strWriter, p); 
        paramValue = _strWriter.ToString(); 
       } 
       catch 
       { 
        paramValue = "Unable to Serialize Parameter"; 
       } 
      } 
      Trace.TraceInformation("[" + Process.GetCurrentProcess().Id + "-" + Thread.CurrentThread.ManagedThreadId.ToString() + "]" + " Parameter: " + paramValue); 
     } 
    } 
} 
7

Bạn không thể, về cơ bản. Phản ánh cho phép bạn nhận được các biến số dụ (và tĩnh) nhưng nếu bạn muốn ghi nhật ký biến cục bộ, bạn sẽ phải thực hiện điều đó một cách rõ ràng. Có thể bạn có thể làm tốt hơn một chút bằng cách sử dụng API lược tả, nhưng đó sẽ là một bước cực kỳ khắc nghiệt.

4

Bạn có thể làm một kết xuất bộ nhớ của quá trình kể từ khi chụp cả đống và ngăn xếp, nhưng vì bạn đã gắn thẻ câu hỏi là đăng nhập, tôi cho rằng đó không phải là những gì bạn đang tìm kiếm.

Tuy nhiên, bạn có thể giảm nhu cầu thông tin này bằng cách đảm bảo các phương pháp của bạn luôn nhỏ và quan trọng. Điều đó sẽ mang lại nhiều dấu vết ngăn xếp hữu ích hơn và nó sẽ giới hạn số lượng người dân địa phương để kiểm tra.

2

Sử dụng MiniDumpWriteDump để tạo kết xuất bộ nhớ của quá trình tại thời điểm ngoại lệ. Bạn sẽ phải P/Gọi nó.

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