2010-10-20 14 views
23

Estoy tratando de depurar una aplicación de Windows Forms que tiene un gran número de eventos: pulsaciones de botón, temporizadores, etc ..Depuración de todos los eventos en Visual Studio 2010 sin establecer puntos de ruptura

¿Hay una manera de captar cada línea de código que está ejecutando la aplicación sin establecer un punto de ruptura?

editar: El programa no fue escrito por mí, así que no estoy familiarizado con el código. Deseo pasar por todo el programa, capturando cada línea de código que se está ejecutando. Establecer puntos de ruptura en cada evento no es práctico ya que varios controles se crean dinámicamente.

+0

depuración se trata de enfocar su atención en algunos puntos concretos, no se rompen en todos y cada instrucción si usted me pregunta. –

Respuesta

0

No realmente, pero puede establecer un punto de interrupción y un solo paso (F10/F11) en el resto del código.

+1

Gracias por la respuesta rápida. Pero el problema es que no puedo coger eso es de código que se ejecutan dentro de los eventos –

+0

@Ying - Tiene que establecer el punto de interrupción en el interior del método de control de eventos (a menos que tenga mala interpretación que) – Justin

+1

El problema es que esta solución es muy poco práctico ya que el programa es grande y complejo –

0

No, no es frágil, debe configurar cada punto de interrupción usted mismo.

Si ayuda que F9 sea la tecla de acceso directo para asignar un punto de interrupción, simplemente configure un punto de interrupción al inicio de cada método y utilice paso a paso (F10)/paso a (F11) desde allí.

1

¿Por qué le gustaría romper en cada línea? Esto sería muy oneroso y lento. Si desea ver la actividad de su programa mientras se ejecuta, use un mecanismo de registro o Debug.Writeline para generar información en la ventana Inmediato.

+0

he mal utilizado el término de depuración. El programa no fue escrito por mí, así que no estoy familiarizado con su funcionamiento. Quería poder recorrer cada línea para ver cómo funciona. –

+0

Puede establecer un punto de interrupción en la primera línea de ejecución, luego recorrer paso a paso la ejecución línea por línea (no recuerdo el atajo de teclado) –

+5

Podría estar haciendo mal ... pero desde mi experiencia esto no código de captura que se ejecuta dentro de eventos sin el uso de puntos de interrupción. –

1

No puede rastrear las líneas de código, pero puede usar las llamadas Trace.TraceInformation donde desea tener una idea de lo que se ejecuta. También hay Debug.Write. Ambas salidas escribirán en la ventana de salida de Visual Studio.

Otra solución sería agregar el registro a su aplicación, por ejemplo con log4net, pero eso puede ser excesivo para sus necesidades.

1

Esto no es exactamente lo que está pidiendo, pero en caso de que no lo supiera, puede activar o desactivar un punto de interrupción existente. En su caso, podría agregar puntos de interrupción en lugares clave de su código y simplemente deshabilitarlos cuando no quiera depurarlos. De esta forma, podrás volver a habilitarlos más tarde cuando quieras volver a utilizarlos.

Habilitar/deshabilitar está disponible a través de la ventana de puntos de interrupción que se encuentra en el menú Depurar> Windows> Puntos de interrupción (CTRL + D, B). También puede incluir las columnas "Función" y "Archivo" en la ventana, que pueden ayudarlo a identificar qué puntos de interrupción están en los controladores de eventos que le interesan

9

También puede probar una herramienta de cobertura de código.

Por ejemplo, si usted tiene Resharper y dotCover, puede ejecutar la aplicación (a través de la dotCover-> Aplicación de la cubierta ... del menú) y cuando la aplicación termina, dotCover le mostrará qué líneas de código se ejecute en el VS IDE resaltándolos en verde. Las líneas de código que no se ejecutan están coloreadas en rojo.

No sé si hay otras herramientas que hacen esto, pero es una opción.

10

Si está utilizando la edición Ultimate de su Visual Studio 2010 puede usar su nueva característica llamada IntelliTrace (anteriormente Historical Debugger). Esto le permitirá hacer exactamente lo que quiera, podrá ver todas las llamadas de método y los eventos que ocurrieron durante la ejecución de su programa, y ​​podrá volver al evento que necesite.

Para activar IntelliTrace, vaya al Tools → Options → IntelliTrace, y marque la casilla "Habilitar IntelliTrace" y seleccione uno de los dos modos: "solo eventos" o "eventos e información de llamadas", luego ejecute su aplicación con un depurador (F5) .

La diferencia entre los dos modos es que esta última utiliza el generador de perfiles para recoger toda la información tiempo de ejecución, por lo que obtener una pila de llamadas completa, sin embargo, no será capaz de utilizar de edición y continuación las características de la depurador

usted puede encontrar más en este series of articles, y por supuesto, en MSDN.

+0

esto suena como la solución perfecta para mí. ¿Está disponible para profesionales? Actualmente estoy investigando esto y actualizaré –

+0

Lamentablemente, esta es una de las características que solo está disponible con Visual Studio Ultimate :( –

+0

Además, creo que puede descargar la [versión de prueba de Ultimate] (http: // www. microsoft.com/downloads/en/details.aspx?FamilyID=06a32b1c-80e9-41df-ba0c-79d56cb823f7). –

11

Para depurar un clic de botón y sin puntos de interrupción de ajuste:

  1. iniciar la aplicación con el depurador.
  2. Llegue al estado inmediatamente antes del clic previsto.
  3. Regrese al depurador y presione Pausa y luego F11 (Paso a paso) - nada sucederá.
  4. Vaya a la aplicación y presione el botón - el depurador debe tomar el control y colocarlo en el controlador de eventos.

Nota: Esto no funcionará si se trata Paint, cualquier evento del mouse o, probablemente, algunos otros eventos. El depurador lo llevará a esos manejadores cada vez que intente los pasos anteriores.

+0

No puedo creer que no haya estado usando "Romper todo", exactamente lo que necesitaba. – Rob3C

+0

¿Qué quieres decir con pausa? Solo veo un botón "Romper todo", y eso no funciona para tu método. –

+0

@ Dgrin91: Esto fue hace 3.5 años, pero _que no funciona_ no es de mucha ayuda. Quizás una nueva pregunta esté en orden. –

2

he desarrollado la herramienta Runtime Flow para resolver este problema exactamente - para entender una gran base de código .NET poco familiar a través de la función de supervisión en tiempo real de las llamadas. Es similar a IntelliTrace, pero pone más énfasis en el flujo de control que en la depuración.

Cuestiones relacionadas