2009-07-10 10 views
10

Tengo una aplicación VB que necesito monitorear mientras se está ejecutando. Agregué algunas variables a la ventana Inspección, pero mientras la aplicación se está ejecutando, la ventana de observación está atenuada. La única forma que he encontrado para ver los valores de las variables es usar Debug -> Break All, pero esto detiene el programa.Visual Studio ¿La ventana del reloj está atenuada?

He utilizado otros IDEs y permiten el control de variables activas. ¿Es esto posible en VS?

Disculpe si esta es una pregunta novato.

ACTUALIZACIÓN: Para que quede claro, mi aplicación se está comunicando con un equipo de laboratorio y, a medida que se envían o reciben datos o se detectan errores, se incrementan los contadores. Me gustaría ver estos contadores, pero no quiero construir una pantalla para hacer esto, ya que están para la depuración. Simplemente asumí que esta es la funcionalidad básica en cualquier IDE

SORPRENDENTE: Parece que Visual Studio no ofrece esta funcionalidad básica (lo que yo consideraría). Para aquellos que parecen pensar que esto no es posible con un lenguaje interpretado, considere este experimento mental. Si presionó Romper todo rápidamente seguido de Continuar, entonces actualizaría la ventana del reloj, ¿correcto? ¿Por qué entonces no puede Visual Studio hacer esto como un solo comando Actualizar reloj o mejor aún permitir que esta función se ejecute automáticamente en un período especificado por el usuario. Sin escrituras de depuración, sin archivos de registro, sin detener su programa a mitad de camino y creando tiempos de espera excedidos. Estoy sorprendido de que no puedas hacer esto. Es un poco como no tener puntos de ruptura.

+0

@Shocked En teoría, un depurador también podría hacerlo mediante el establecimiento de una CPU de apoyo punto de interrupción rango de datos en la memoria, y hacer 'break, actualizar el reloj, y luego continuar' automáticamente cada vez que se actualiza la variable. – ChrisW

Respuesta

5

¿Qué IDE o entorno de desarrollo muestra, en tiempo real, los valores de las variables en la ventana Inspección, sin tener que acceder a ningún punto de interrupción, mientras la aplicación se está ejecutando?

Visual Studio no proporciona esto. Para obtener valores actualizados en la ventana Inspección o editar elementos allí, la aplicación debe estar en un punto de interrupción o de depuración.

+2

Tanto Codewarrior como Chameleon le permiten actualizar manualmente el contenido de las variables o establecer una actualización automática, especificando un intervalo de actualización en segundos o en mseg. Asumí que esta es la funcionalidad base en cualquier depurador. – NormD

+0

Ah, ciertamente ha pasado un tiempo desde que usé Codewarrior. No estaba al tanto de esto, por lo que pregunté qué IDEs te permiten hacer esto. Estoy impresionado y desearía que Visual Studio tuviera una función similar. Gracias por la información. – marcc

5

Después de haber hecho "break" para dar control del programa al depurador, entonces puede "pasar" por el código usando las teclas de función como F10 y F11. Durante cada 'paso', el programa evalúa una o más declaraciones; después de cada paso se detiene (hasta el siguiente paso), y mientras (solo mientras) se detiene puede 'ver' su estado actual.

Existen otras formas de entrar en el depurador (para usar la ventana de vigilancia mientras el programa está detenido): otras formas de establecer 'puntos de interrupción' y utilizar la función 'ejecutar al cursor'.


Por supuesto, pero detener un programa que está activamente recibiendo o enviando datos a un algún otro proceso, conductor, etc, se detiene esta comunicación y hace que los tiempos de espera y otros problemas.

Eso es cierto. Para ver los valores cambian en tiempo real, utilizo un archivo de registro:

  • agregar instrucciones a mi código, de forma que cuando se cambia el valor de una variable que emiten una nueva línea a un archivo de registro (que muestra la el valor cambiado)

  • Ejecutar el programa

  • reloj de nuevas líneas que se añade al archivo de registro mediante una utilidad como tail -f.

Nunca he visto un depurador con la funcionalidad que mencionas. Lo más parecido a la funcionalidad que mencionó (y que no es exactamente la funcionalidad que mencionó) es How to: Set a Data Breakpoint (Native Only).

+0

Por supuesto, pero detener un programa que está recibiendo o enviando datos activamente a algún otro proceso, controlador, etc. detiene esta comunicación y causa tiempos de espera y otros problemas. – NormD

+1

Hay muchos problemas con un archivo de registro. Digamos que está recibiendo miles de paquetes de datos por segundo, si en vez de simplemente incrementar un contador, escribe una línea en un archivo de registro, el sistema se caerá. Incluso escribir en una consola es una operación muy pesada en comparación con el incremento de un contador. – NormD

+0

En otro comentario, dijiste "Codewarrior y Chameleon te permiten ... especificar un intervalo de actualización en segundos o en mseg"; puedes construir la misma lógica en tu registro, p. escriba en el archivo de registro una vez cada pocos segundos. De todos modos, creo que tienes tu respuesta ahora. – ChrisW

0

Asegúrese de que está en la compilación "Debug" y Microsoft Debugger se está ejecutando como un servicio y no está bloqueado/deshabilitado.

+0

Presiono F5 y la aplicación se ejecuta. Supongo que esta es la compilación de depuración, ya que si rompo la aplicación todas las variables tienen valores. ¿Cómo funciona una depuración como servicio? ¿Esto me permitiría ver las variables mientras el programa está cambiando? – NormD

2

Lo que está intentando hacer no es posible en Visual Studio. Todas las ventanas de inspección variable (watch, locals, autos, etc ...) dependen del proceso de debugee que está en un estado de interrupción para funcionar.

Esto es cierto de prácticamente cualquier depurador con el que haya trabajado en el pasado. Al menos aquellos que usan un lenguaje compilado.

Tengo curiosidad sobre a qué IDE te refieres? ¿Trataron con idiomas interpretados?

0
+0

Gracias por el puntero, pero el artículo dice que se aplica a C++ y no menciona a VB. También a partir de una revisión rápida, parece que se usan muchas declaraciones de escritura de depuración, que sin duda son mucho más trabajo que rastrear una variable. – NormD

Cuestiones relacionadas