2009-12-07 33 views
11

Tôi muốn áp dụng DebuggerDisplayAttribute để bao gồm giá trị địa chỉ bộ nhớ. Có cách nào để hiển thị trong hệ thập lục phân không?Có thể sử dụng định dạng chuỗi trong văn bản được hiển thị bằng DebuggerDisplay không?

[DebuggerDisplay("Foo: Address value is {Address}")] 
class Foo 
{ 
    System.IntPtr m_Address = new System.IntPtr(43981); // Sample value 


    System.IntPtr Address 
    { 
     get { return m_Address; } 
    } 
} 

Điều này sẽ hiển thị: Foo: Address value is 43981 Thay vào đó, tôi muốn các giá trị được hiển thị trong hex, như thế: Foo: Address value is 0xABCD.

Tôi biết rằng tôi có thể áp dụng tất cả các loại định dạng bằng cách ghi đè ToString(), nhưng tôi tò mò nếu có thể với DebuggerDisplayAttributes tương tự.

Cảm ơn trước!

Trả lời

22

Có, bạn có thể sử dụng bất kỳ phương pháp nào khỏi các thuộc tính giống như bình thường. [DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")] là một ví dụ

http://msdn.microsoft.com/en-us/library/x810d419.aspx

+0

Trong khi điều này là có thể, tôi khuyên bạn nên chống lại nó. Nó lấy đi sự lựa chọn để hiển thị số dưới dạng thập lục phân hoặc thập phân. Nếu bạn không thêm văn bản vào nó, nó cũng được in dấu ngoặc kép ở đầu và cuối, vì vậy cuối cùng nó sẽ gây ra '" 0xDEADBEEF "' xuất hiện trong cửa sổ trình gỡ rối, lúc đầu trông giống như một chuỗi thay vì một số nguyên. –

2

Nếu bạn chỉ muốn xem các giá trị trong định dạng hex, có một tùy chọn trong Visual Studio để hiển thị giá trị trong định dạng đó. Trong khi gỡ lỗi, hãy di chuột qua biến của bạn để hiển thị màn hình gỡ lỗi hoặc tìm một biến trong cửa sổ đồng hồ hoặc cửa sổ địa phương của bạn. Nhấp chuột phải vào biến và chọn tùy chọn "Hiển thị hệ thập lục phân". Trình gỡ lỗi sau đó sẽ hiển thị tất cả các giá trị số ở định dạng thập lục phân. Trong trường hợp này, bạn sẽ nhận được: "Foo: Giá trị địa chỉ là 0x0000abcd"

Rất tiếc, tôi không thể thấy bất kỳ cách nào để thực sự kiểm soát định dạng của chuỗi được hiển thị bởi thuộc tính DebuggerDisplay như bạn đang yêu cầu.

7

Có một mẹo khuyến cáo của https://blogs.msdn.microsoft.com/jaredpar/2011/03/18/debuggerdisplay-attribute-best-practices/

Về cơ bản, tạo ra một tin tài sản, nói, DebugDisplay. Yêu cầu thuộc tính trả lại chuỗi được định dạng mà bạn chọn. Sau đó, chỉ cần sử dụng thuộc tính riêng mới của bạn trong thuộc tính DebuggerDisplay.

Ví dụ:

[DebuggerDisplay("{DebugDisplay,nq}")] 
public sealed class Student { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    private string DebugDisplay { 
     get { return string.Format("Student: {0} {1}", FirstName, LastName); } 
    } 
} 

Tôi tìm cách này dễ đọc hơn nhiều.

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