2011-02-07 12 views
7

¿Alguien sabe cómo trazar cómo cambia una variable observada a lo largo del tiempo en Visual Studio 2010? Es decir. si tuviera el siguiente códigoCómo graficar cómo cambian las variables en Visual Studio

double someVariable; 
for (int i = 0; i < 20; i++) 
{ 
    someVariable = Math.Pi() * i; 
} 

y que viste 'someVariable' en el IDE se podía recorrer el código y ver cómo crece con cada paso. Me gustaría poder recorrer el ciclo y trazar lo que hizo esa variable sin tener que pasar manualmente por ella. Estoy haciendo un montón de matemáticas y, a veces, observar cómo cambian las variables es realmente útil y perspicaz.

Más información: Tengo un montón de solucionadores ligeramente diferentes y, dependiendo del problema, estoy solucionando problemas Me gustaría ver diferentes variables para ver dónde están ocurriendo los problemas. Actualmente pongo estas variables en un archivo de registro pero ralentiza significativamente el solucionador y tengo que pasar una buena cantidad de tiempo cambiando el código de depuración para rastrear problemas. Estoy buscando una forma más sencilla de hacer esto que sea IDE céntrica. Tipo de un Visualizador con esteroides.

+0

¿Puedes simplemente enviarlo a la consola? 'Console.WriteLine()' o 'Trace.WriteLine()' –

+0

Esto es perfecto para una variable/contador Perfmon - vea mi respuesta – Tim

Respuesta

7

¿Qué le parece usar Tracepoints? En VS 2008 (es algo diferente en VS 2010) simplemente agrega un punto de interrupción normal, luego haga clic derecho en él, luego seleccione "Cuando se acierte ...".

En el cuadro de diálogo siguiente, verificación "Imprimir un mensaje" y entrar en algo así como

someVariable = {someVariable} 

esto sólo su valor de salida a la ventana de salida en el IDE.

Captura de pantalla:

tracepoint dialog

+0

Esto es ciertamente lo que estoy tratando de lograr. Pero cuando lo probé no pude encontrar dónde estaba imprimiendo. – PlTaylor

+0

No importa, lo encontré en la salida donde tiene más sentido. ¡¡Este es un gran consejo!! – PlTaylor

1

¿Manera fácil? Ninguna.

Pero se puede codificar por sí mismo ..

  1. Uso propiedad.
  2. En el código de colocación del setter, se registrará el cambio en alguna colección. Posiblemente también ahorre tiempo.
  3. utilizar un poco de control de trazado para trazar esta colección

Editar: Si no desea crear propiedad, se puede crear una especie de clase genérica, que tienen esta propiedad y tiene algún tipo de lógica interna de registro .

+0

Esto es más o menos lo que hago ahora, excepto que uso mi código de registro incorporado para registrarlo a mi archivo de registro El problema con esto es que cuesta velocidad y algunas veces me olvido de sacarlo. El otro problema es que tengo docenas de solucionadores ligeramente diferentes en mi proyecto y me gustaría algo que esté centrado en IDE en lugar de específico de código, así que cuando necesito la funcionalidad está ahí, pero cuando no lo hago no se despliega a mis usuarios. ralentizando su software. – PlTaylor

+0

No soy la mejor persona para abordar esto, pero creo que es posible que pueda usar su web.config para compilarlo de forma diferente para la producción que lo que ejecuta en modo de depuración. De esta forma, no necesitarás recordar eliminar esto para tu compilación. Con suerte, alguien más puede verificar y posiblemente explicar esto mejor. – nycdan

+0

Otro truco que puede ayudar es poner // *** DEBUG *** después de cada línea que desea eliminar o comentar para su compilación. Luego haga una búsqueda de proyecto para que pueda encontrar rápidamente todas las líneas. – nycdan

0

Esperemos que alguien se llega con una mejor respuesta, pero aquí es lo que he hecho en una situación similar ...

de salida que los valores, en formato CSV, a la consola. A partir de ahí, copie y pegue en Excel, y deje que Excel haga algunos gráficos para mí. Funcionó bastante bien, pero fue una molestia completa durante una sesión de desarrollo impulsada por la cafeína.

+0

Actualmente lo registro en un archivo de registro, consulte la respuesta anterior sobre por qué estoy buscando una respuesta diferente. – PlTaylor

0

¿No puede simplemente definir, organizar y escribir algunosVariable en la matriz [i] dentro del ciclo? Entonces podrías consultarlo una vez que hayas terminado.

double[] x = new double[20]; 
double someVariable; 
for (int i = 0; i < 20; i++) 
{ 
    someVariable = Math.Pi() * i; 
    x[i] = someVariable; 
} 
+0

Tengo docenas de solucionadores en mi código que preferiría tener una única solución en lugar de implementar una solución en cada solucionador, y estoy tratando de mantener los solucionadores tan ligeros y rápidos como sea posible y no quiero implementar nada a mis usuarios. – PlTaylor

1

Uso Monitor de rendimiento y publicar ese valor a un contador que Perfmon puede leer. Perfmon hace todo el trazado, etc. Solo necesita publicar en perfmon. Desafortunadamente no está muy bien documentado y no es trivial.(bueno, al menos no fue trivial para C++ no administrado cuando lo estaba buscando)

Lo hice hace un tiempo y utilicé algunas clases publicadas en un antiguo artículo MSJ. (ca 1998 más o menos)

Voy a tratar de encontrar algunos documentos en línea.

See this question for some links

This may also be useful

Si encuentra una solución o esto funciona para usted por favor háganoslo saber.

+0

Esto es ciertamente interesante, pero probablemente esté mucho más involucrado de lo que realmente quiero hacer. – PlTaylor

0

He encontrado SpPerfChart muy fácil de usar y útil. Simplemente agregue el control de usuario e ingrese sus datos cambiantes. Obtendrá una gráfica de cualquier número que ingrese en tiempo real.

Cuestiones relacionadas