Buena Manera de Depurar Errores de Visual Studio Designer


¿Hay una buena manera de depurar errores en el Diseñador de Visual Studio?

En nuestro proyecto tenemos toneladas de controles de usuario y muchas formas complejas. Para los complejos, el Diseñador a menudo lanza varias excepciones que no ayudan mucho, y me preguntaba si hay alguna manera agradable de averiguar lo que ha salido mal.

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

Author: Peter Mortensen, 2008-09-02

7 answers

 7
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-22 08:09:38

He podido depurar algunos problemas del diseñador de control ejecutando una segunda instancia de VS, luego desde su primera instancia de VS haga un "Debug -> Attach to Process" y elija "devenv".

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

 38
Author: Craig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-02 15:22:44

Ha sido un dolor en 2005 y todavía lo es en 2015. Los puntos de interrupción a menudo no se golpean, probablemente debido a que los ensamblajes se copian en la sombra o algo así por el diseñador (?). Lo mejor que puede hacer es romper manualmente introduciendo 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
 2
Author: Haymo Kutschbach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-13 10:18:48

Esto me ha pasado muchas veces y es un verdadero dolor.

En primer lugar, sugeriría intentar seguir el rastro de la pila proporcionado por el diseñador, aunque descubrí que a menudo simplemente enumera un montón de cosas internas que no sirven de mucho.

Si eso no funciona, intente compilar y determinar la excepción a partir de ahí. Realmente estás volando a ciegas, que es el problema. A continuación, podría intentar simplemente ejecutar el código y ver qué excepción se plantea cuando se ejecuta, que debería te daré más información.

Un enfoque de último suspiro podría ser eliminar todo el código no generado del formulario y reintroducirlo 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 sigue dando lugar a un error. A continuación, podría volver a introducir este paso a paso de la misma manera para determinar qué control personalizado está causando el problema, a continuación, ir y depurar que separado.

Básicamente, por lo que puedo decir no hay manera real alrededor del problema que no sea para slog un poco!

 1
Author: ljs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-02 14:36:19

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

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

 1
Author: ShawnFeatherly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-22 08:17:39

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

  • Utilice el control de código fuente y guarde con frecuencia. Cuando se produce un error de diseñador, obtenga una lista de todos los cambios en los controles afectados que se han producido recientemente y pruebe cada uno hasta encontrar al culpable
  • asegúrese de revisar las rutinas de inicialización de los controles involucrados. Muy a menudo estos errores se producen debido a algún error o mala dependencia que se llama a través de el constructor predeterminado para un control (un error que solo puede manifestarse en VS)
 0
Author: Yaakov Ellis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-02 14:32:57

Puede ejecutar una segunda instancia de VS y adjuntarla a la primera instancia de VS (Ctrl+Alt+P). En la primera instancia, establezca los puntos de interrupción, en la segunda, ejecute el diseñador y se activará el punto de interrupción. Puede pasar por el código, pero Editar y continuar no funcionará.

Para Editar y Continuar trabajando, establezca las opciones de depuración de la biblioteca de control para ejecutar un VS con el argumento de la línea de comandos como el nombre de archivo de la solución. A continuación, simplemente puede establecer los puntos de interrupción y golpear F5. Lo hará depurar al igual que el código de usuario! Como nota al margen, también puede hacer esto will VS y complementos de Office.

 0
Author: Kevin Phelps,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-16 18:57:58