2009-11-25 23 views
5

Tôi đang sử dụng VS 2010 và đang làm việc với nhiều luồng trong C# trong dự án hiện tại của mình. Tôi đã viết một số tiện ích đổ luồng để viết ra một số loại luồng nhất định cho mục đích gỡ lỗi, nhưng dường như tôi vẫn gặp khó khăn khi tôi gỡ lỗi và cần xem xét luồng mà tôi đang gỡ lỗi, nhưng tôi không đặt đổ các cuộc gọi trong đó. Nó có vẻ như tôi sẽ có thể đổ dòng bằng cách nào đó chỉ bằng cách sử dụng VS hoặc có thể nói nó để gọi một trong các phương pháp dump của tôi trên một dòng trong trình gỡ rối. Có một wy để làm điều này?Có cách nào để đổ một luồng từ trình gỡ lỗi trong VS

Các luồng mà tôi đang làm việc có một số văn bản mô tả một khối dữ liệu và sau đó là các byte của blob, vì vậy, hãy xem mô tả hữu ích. Phương thức đổ của tôi thường đổ thông tin đó ra và sau đó bỏ qua các đốm màu.

Trả lời

4

Có thể bạn có thể viết Trình hiển thị trực quan? MSDN giải thích như thế nào đây: http://msdn.microsoft.com/en-us/library/e2zc529c.aspx

+0

Rất thoải mái, đây là một giải pháp tuyệt vời cho phép tôi để thực hiện chức năng bãi của tôi là một phần của debugger – MikeD

1

Bạn có thể chỉ cần sử dụng các cửa sổ ngay lập tức để gọi chức năng bãi của bạn trong khi gỡ lỗi:

MikeDsDumpFxn(whateverStreamIsActiveInThisContext) 

Nếu chức năng của bạn trả về một chuỗi nó sẽ in ngay tại đó như là kết quả trong ngay lập tức cửa sổ.

9

Loại này vào Cửa sổ Immediate:

System.Diagnostics.Debug.WriteLine((new System.IO.StreamReader(stream)).ReadToEnd()); 
+1

Bạn có thể cần 'System.Diagnostics.Debug.WriteLine ((System.IO.StreamReader mới (luồng)) ReadToEnd());' – KCD

+2

Lưu ý rằng điều này sẽ tiêu thụ cuộc gọi, do đó bạn nên biết rằng bạn có thể sẽ không có thể tiếp tục phiên gỡ lỗi hiện tại. –

0

Nếu bạn có dữ liệu nhị phân trong luồng mà bạn có thể thử đổ nó vào một tập tin bằng cách sử dụng dòng sau trong immediate window:

var lastPos = stream.Position; 
stream.Seek(0, SeekOrigin.Begin) 
File.WriteAllBytes("filepath.bin", new BinaryReader(stream).ReadBytes((int)stream.Length)) 
stream.Seek(lastPos, SeekOrigin.Begin) 

Các dòng rõ ràng là phải tìm kiếm để ngăn chặn các tác dụng phụ của việc thay đổi vị trí của dòng khi đổ nó (được hoàn nguyên trong dòng cuối cùng).

Nếu dòng không có Length tài sản mà bạn có thể sử dụng một giải pháp tương tự to the one done here:

var lastPos = stream.Position;  
var ms = new MemoryStream(); 
stream.Seek(0, SeekOrigin.Begin) 
stream.CopyTo(ms) 
File.WriteAllBytes("filepath.bin", ms.ToArray()) 
stream.Seek(lastPos, SeekOrigin.Begin) 
Các vấn đề liên quan