2009-07-29 22 views
14

Mi depurador C# no funciona correctamente. A veces omite puntos de corte y línea de códigos. He revisado el administrador de configuración. Incluso he intentado agregar mis proyectos a nuevos archivos de solución. ¿Puede alguien ayudarme?¿Por qué mi depurador C# omite puntos de interrupción?

+0

¿La optimización está deshabilitada? ¿Depurar o liberar? – Guillaume

+1

¿Qué es 'a veces'? –

+0

¿cómo puedo verificar la optimización? veces significa que cada vez que uso el depurador se saltará después de pasar por algunas líneas –

Respuesta

8

Asegúrese de que las optimizaciones estén deshabilitadas (este es el defecto de la configuración de depuración, pero están habilitadas en la configuración de la versión). Las optimizaciones del compilador pueden interferir con el depurador ...

+0

cómo puedo ajustar la optimización del compilador –

+0

Si está usando Visual Studio: haga clic con el botón derecho en el proyecto en el explorador de soluciones, luego seleccione la pestaña "Generar". Debería haber una casilla allí titulada "optimizar código". (Al menos, esto se aplica a VS 2005 y 2008. No sé sobre versiones anteriores). – Odrade

5

¿Está seguro de que compiló correctamente? Me parece que estás depurando una versión anterior, lo que puede suceder si falla la compilación (quizás una falla en el código, tal vez los archivos son de solo lectura).

+0

Estoy compilando proyectos individuales en la solución, pero todavía el mismo problema –

1

Parece que el código fuente no está sincronizado con los archivos PDB. La solución más fácil es limpiar la solución (que borra todos los dlls de la carpeta bin). Recompile, y luego intente caminar de nuevo.

Si aún falla, intente cerrar la solución y eliminar las carpetas "obj". Y luego intenta de nuevo.

y también comprobar que está compilando en modo de depuración - algo que he hecho a menudo ("por qué no está pasando a través ?!") no obtener punto de ruptura

+0

lo he intentado pero todavía el mismo problema –

23

Mi lista de verificación depuración:

  • Asegúrese de que su adhiriéndose al proceso mediante el tipo de código correcto - si el proceso tiene tanto no administrado y el código administrado, entonces no depender de "auto" a trabajar para usted, de manera explícita indicar qué tipo de código de su tratando de depurar
  • Ir al modu ventana (Depurar -> Windows -> Módulos, es posible que deba habilitarla en el menú "Personalizar ..."
  • Asegúrese de que el ensamblaje que ha intentado depurar se haya cargado y de que se hayan cargado los símbolos - Si no se han cargado, haga clic derecho en ese módulo y seleccione "cargar símbolos"
  • Abra su archivo de código y coloque su punto de interrupción; si aparece con el pequeño símbolo de advertencia, mire y vea lo que dice,
  • Es posible que deba ir a "herramientas -> opciones -> depuración -> general" y desmarcar "Habilitar solo mi código (solo administrado)"
  • Es posible que también desee desmarcar "Requerir archivos fuente para que coincidan exactamente con la versión original" , si crees que tus fuentes pueden ser ligeras (Tenga cuidado, sin embargo, ya que esto puede llevar a la depuración con las fuentes completamente incorrectas, lo que puede ser muy confuso)

En ciertos casos, es posible que su módulo no se cargue en el punto donde adjunte su depurador (por ejemplo, si tiene algún tipo de complemento en archetecutre, y los ensamblados de complementos solo se cargan cuando los usa por primera vez). En estos casos, todo lo que puede hacer es intentar y asegurarse de que todo esté preparado para cuando se cargue el módulo.

+0

gracias por una respuesta tan detallada. Lo he intentado todo pero todavía tengo el mismo problema. –

+3

Desactivando "Just My Code ..." lo hizo por mí. Gracias. –

+0

Gran lista. Me ayudó a salir – Arnej65

1

Si se omiten métodos enteros, observe la fuente y vea si el atributo System.Diagnostics.DebuggerStepThroughAttribute está presente.

A pesar del nombre, EVITA que el depurador recorra el método.

+0

no se salta algo de tiempo desde la mitad de la mathod y algunas veces completa mathod. –

+0

¡Brillante! Pensé que me estaba volviendo loco cuando un método personalizado agregado a una clase generada desde XSD no quería depurar. La razón fue que 'xsd.exe' decoró el código que generó con este atributo. Los puntos de ruptura creados antes de F5 a veces se golpean, pero no los nuevos puntos de interrupción, y no siempre. – ajeh

1

Si al menos algunas veces se alcanza el punto de ruptura, significa que probablemente todas las configuraciones estén bien.

Los éxitos que faltan pueden ser causados ​​por algunos efectos secundarios, por ejemplo: la evaluación de propiedades por el depurador (al menos VS omite los puntos de interrupción durante la evaluación de propiedades de depuración) o algunas herramientas de espionaje (pero estos son generalmente atrapar por depurador)

Si cree que este puede ser el caso, apague las herramientas de espionaje y disable the property evaluation by the debugger.

Esto a veces puede no ser suficiente, por ejemplo: si su propiedad devuelve una colección, mostrando p. a Count() evaluará la propiedad, por lo que también eliminará todas las referencias de la propiedad de las ventanas del reloj, etc.

1

Esto funcionó en VS 2017, vaya a Herramientas> Opciones, luego en la Ventana de Opciones vaya a la sección Depuración. Habilitar - "Habilitar el paso de origen de .NET Framework"

1

Desactivar "Propiedades del proyecto/Crear/Optimizar código" funcionó para mí.

Cuestiones relacionadas