2009-11-25 9 views
5

Estoy usando VS 2010 y estoy trabajando con muchas transmisiones en C# en mi proyecto actual. He escrito algunas utilidades de volcado de flujo para escribir ciertos tipos de flujos para depuración, pero parece que me tropiezo con veces cuando estoy depurando y necesito buscar en la secuencia de depuración que estoy depurando, pero no puse mi volcar llamadas allí. Parece que debería ser capaz de volcar la transmisión de alguna manera simplemente usando VS o quizás decirle que llame a uno de mis métodos de volcado en una secuencia en el depurador. ¿Hay un wy para hacer esto?¿Hay alguna manera de volcar una secuencia desde el depurador en VS

Las secuencias con las que estoy trabajando tienen texto que describe una burbuja de datos y luego los bytes del blob, por lo que es útil ver la descripción. Mis métodos de volcado normalmente arrojan esa información y luego saltan los blobs.

Respuesta

1

Se podía utilizar la ventana inmediata para llamar a su función de volcado durante la depuración:

MikeDsDumpFxn(whateverStreamIsActiveInThisContext) 

Si su función devuelve una cadena que se imprimirá allí mismo como el resultado en la inmediata ventana.

9

Tipo de esto en la ventana Inmediato:

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

Es posible que necesite 'System.Diagnostics.Debug.WriteLine ((new System.IO.StreamReader (stream)). ReadToEnd());' – KCD

+2

Tenga en cuenta que esto consumirá la llamada, por lo que debe saber que probablemente no lo hará capaz de continuar la sesión de depuración actual. –

0

Si tiene datos binarios en la corriente se puede tratar de deshacerse de ellos en un archivo usando las siguientes líneas en el 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) 

El la secuencia, obviamente, debe ser buscable para evitar los efectos secundarios de cambiar la posición de la secuencia al descargarla (revertida en la última línea).

Si la corriente no tiene la propiedad Length se puede utilizar una solución similar 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) 
Cuestiones relacionadas