2010-09-10 20 views
7

Estoy utilizando excepciones para validar una entrada de control en Silverlight 4. Cuando lanzo una excepción de entrada no válida, VS 2010 muestra la ventana emergente y detiene el programa. Ignoro esto y reanudo el programa, y ​​todo continúa bien (ya que la excepción se utiliza para señalar un error de validación). ¿Hay alguna manera de marcar esa excepción como ignorada?¿Hace que Visual Studio ignore las excepciones?

Estoy siguiendo este tutorial.

+5

Casi un duplicado exacto de: http://stackoverflow.com/questions/2689065/supress-output-from-visual-studio-output-pane-c/2689187#2689187 (y mi respuesta se aplica igualmente aquí). Aconsejo no utilizar excepciones para validar la entrada de los usuarios; en todo caso, la entrada correcta es la excepción y confunde la regla, y no al revés. –

+0

Lo sé. Pero esta parece ser la forma en que Silverlight lo hace. (O eso parece. Soy nuevo en SL) –

+0

Podría considerar el enfoque 'Try *', como 'int.TryParse (" 123 ", ref result)' que devuelve un 'bool' que indica si la operación tuvo éxito . – zneak

Respuesta

16

de depuración -> Excepciones -> Deseleccionar

+2

Sí, pero debería poder deshabilitarlo directamente desde la ventana emergente. –

4

menú, depurador, Excepciones ...

En ese cuadro de diálogo, puede quitar la marca de verificación en la columna 'tirado' para una excepción, por un conjunto espacio de nombres Puedes agregar el tuyo etcétera etcétera.

+0

Esta fue información útil y nos permitió crear una excepción personalizada para restablecer los registros FPU de utilizar un dll no administrado y poder depurar de forma normal. ¡Muy útil! – ouflak

1

Usted puede desactivar algunas bloquear el tiro por la rodea en el bloque

#if !DEBUG 
     throw new Exception(); 
/// this code will be excepted in the debug mode but will be run in the release 
#endif 
+3

¿Esto no evitará que se arroje la excepción? Quiero que sea lanzado, simplemente no quiero que VS detenga la aplicación y aparezca esa casilla. –

1

Poner esta por encima de la propiedad que produce la excepción parece que debería funcionar, pero al parecer no lo hace: [System.Diagnostics.DebuggerHidden()]:

private String name; 

    [System.Diagnostics.DebuggerHidden()] 
    public String Name 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      if (String.IsNullOrWhiteSpace(value)) 
      { 
       throw new ArgumentException("Please enter a name."); 
      } 
     } 
    } 
2

Obtuve [System.Diagnostics.DebuggerHidden()] para que funcione si también seleccioné

Depuración> Opciones> Depuración > General> Habilitar solo mi código (solo administrado).

Accedo mucho al modelo de objetos de Excel, y realmente me gusta poder ejecutar el depurador y detectar todas las excepciones, ya que mi código normalmente es la excepción menos. Sin embargo, la API de Excel arroja muchas excepciones.

// [System.Diagnostics.DebuggerNonUserCode()] works too 
[System.Diagnostics.DebuggerHidden()] 
private static Excel.Range TrySpecialCells(Excel.Worksheet sheet, Excel.XlCellType cellType) 
{ 
    try 
    { 
     return sheet.Cells.SpecialCells(cellType); 
    } 
    catch (TargetInvocationException) 
    { 
     return null; 
    } 
    catch (COMException) 
    { 
     return null; 
    } 
} 
3

He intentado hacer una solución genérica, que podría poner alrededor de cualquier llamada donde quiero el depurador no parar si consigo una excepción, pero no he tenido que funcione.

Se aprecian todas las ideas. Sin embargo, la solución obvia sería para depurador VS2010 para apoyar un DoNotBreakIfException bandera :-)

Mi idea era capaz de reemplazar un código como

srng = TrySpecialCells(sheet, cellType); 

por

srng = ExcelTry(() => sheet.Cells.SpecialCells(cellType)); 

donde ExcelTry es

[System.Diagnostics.DebuggerNonUserCode()] 
[System.Diagnostics.DebuggerHidden()] 
private static T ExcelTry<T>(Func<T> call) 
{ 
    try 
    { 
     return call(); 
    } 
    catch (TargetInvocationException) 
    { 
     return default(T); 
    } 
    catch (COMException) 
    { 
     return default(T); 
    } 
} 
+0

Esta entrada debe leerse después de mi entrada a continuación, que está funcionando. – Mattias

+0

use "static T ExcelTry privado (Expresión > call)" y "return call.Compile()();" – Sven

0

Desde Visual Studio 2015 en adelante, hay una ventana de Configuración de excepciones para esta.

Test> Windows> Ajustes de excepción

Cuestiones relacionadas