visual tutorial studio espaƱol debug code visual-studio gui-designer

visual-studio - tutorial - visual studio code go to definition php



Buena forma de depurar los errores de Visual Studio Designer (7)

Cada uno es diferente y a veces pueden ser oscuros. Como primer paso, haría lo siguiente:

  • Use el control de fuente y ahorre a menudo. Cuando se produce un error de diseñador, obtenga una lista de todos los cambios a los controles afectados que ocurrieron recientemente y pruebe cada uno hasta que encuentre al culpable
  • Asegúrese de verificar las rutinas de inicialización de los controles involucrados. Muy a menudo estos errores ocurrirán debido a algún error o mala dependencia que se llama a través del constructor predeterminado para un control (un error que solo puede manifestarse en VS)

¿Hay una buena forma de depurar errores en Visual Studio Designer?

En nuestro proyecto tenemos toneladas de UserControls y muchas formas complejas. Para los complejos, el Diseñador a menudo arroja varias excepciones que no ayudan mucho, y me preguntaba si hay alguna forma agradable de averiguar qué salió mal.

El lenguaje es C # y estamos usando Visual Studio 2005.


He tenido esto suceder muchas veces y es un verdadero dolor.

En primer lugar, sugeriría tratar de seguir el rastro de pila proporcionado por el diseñador, aunque descubrí que a menudo simplemente enumera un montón de cosas internas que no son de mucha utilidad.

Si eso no funciona, intente compilar y determinar la excepción desde allí. Realmente estás volando a ciegas, que es el problema. A continuación, puede intentar simplemente ejecutar el código y ver qué excepción se genera al ejecutarlo, eso debería proporcionarle más información.

Un enfoque de última hora podría ser eliminar todo el código no generado del formulario y volver a introducirlo gradualmente para determinar el error.

Si está utilizando controles personalizados, también puede eliminar manualmente el código generado relacionado con los controles personalizados si el método anterior aún genera un error. A continuación, puede volver a introducir este paso a paso de la misma manera para determinar qué control personalizado está causando el problema, luego vaya a depurarlo por separado.

Básicamente, por lo que puedo decir, ¡no hay otra forma de resolver el problema que no sea tratar de resolverlo un poco!


Pude depurar algunos problemas del diseñador de control ejecutando una segunda instancia de VS, luego de su primera instancia VS hago una "Depuración -> Adjuntar al proceso" y elijo "devenv".

La primera instancia VS es donde establecerás tus puntos de interrupción. Use la segunda instancia para cargar el diseñador y hacer que se ejecute el código "diseñador".


Puede ejecutar una segunda instancia de VS y adjuntarlo a la primera instancia de VS (Ctrl + Alt + P). En la primera instancia, configure los puntos de interrupción, en la segunda instancia ejecute el diseñador, y el punto de interrupción se disparará. Puede recorrer el código, pero Editar-y-Continuar no funcionará.

Para que Edit-and-Continue funcione, configure las opciones de depuración de la biblioteca de control para ejecutar un VS con el argumento de línea de comando como el nombre de archivo de la solución. Luego puede simplemente establecer los puntos de interrupción y presionar F5. Se depurará al igual que el código de usuario! Como nota al margen, puede hacer esto también los complementos VS y Office.



Descubrí por qué a veces los puntos de interrupción no se golpean. En el cuadro de diálogo Adjuntar al proceso , el tipo "Adjuntar a:" tiene que ser "Seleccionar ..." ''d.

Una vez que cambié a "Managed 4.0, 4.5", se activaron los puntos de interrupción de una aplicación WinRT . Fuente: Depuración del diseñador en WinRT .


Ha sido un dolor en 2005 y aún lo es en 2015. Los puntos de interrupción a menudo no funcionarán, probablemente debido a que los ensamblados se copian en la sombra o algo por el diseñador (?). Lo mejor que puede hacer es interrumpir manualmente al introducir una llamada a Debugger.Break() . Puede envolverlo en un compilador condicional de la siguiente manera:

#if DEBUG System.Diagnostics.Debugger.Break(); #endif int line_to = break; // <- if a simple breakpoint here does not suffice