2011-10-12 7 views
5

Me pregunto si hay una herramienta para encontrar excepciones no detectadas en C# mediante el uso de análisis de código estático? Básicamente, quiero seleccionar un método A() y quiero una lista de todas las excepciones lanzadas por methodA() y todos los métodos llamados por methodA(). Intenté ReSharper + Agent Johnson y AtomineerUtils, ambos fallan esta tarea simple.Buscar excepciones no detectadas en el código de C#

Aquí está mi código de ejemplo:

public class Rectangle 
{ 
    public int Width { get; set; } 
    public int Height { get; set; } 

    public int Area() 
    { 
     CheckProperties(); 
     long x = Width * Height; 
     if (x > 10) 
      throw new ArgumentOutOfRangeException(); 
     return (int) x; 
    } 

    private void CheckProperties() 
    { 
     if (Width < 0 || Height < 0) 
      throw new InvalidOperationException(); 
    } 
} 

La herramienta debe ser capaz de decirme (en cualquier forma) que el método de Área() lanzará ArgumentOutOfRangeException o InvalidOperationException.

+3

veo lo que quiere y donde se está tratando de ir pero aún así, tenemos en cuenta que en muchos casos está bien para lanzar excepciones a partir del código, el hecho es que cada vez que uses esos métodos de tus clases consumidoras reales, deberías atraparlos allí, probablemente sea 100% bueno que Area arroje algo y no necesite atraparlos ahí, sino que llame a Rectangle.Area debería ... –

+0

@Davide Piras: Entiendo su punto y de acuerdo con usted, pero considere que está usando una gran biblioteca de terceros con documentación realmente mala: encontrar excepciones no detectadas (o llamémoslas "posiblemente lanzadas") realmente facilitaría la depuración y el desarrollo. – Korexio

Respuesta

6

utilicé un R # complemento vez Eso hizo eso en el IDE - Excepcional. Mala idea, resulta que se queja de cada cadena. Llamada de formato y casos comunes similares que pueden arrojar, pero eso no causará problemas.

decidir por sí mismo si vale la pena: https://github.com/CSharpAnalyzers/ExceptionalReSharper

+0

Cuando uso un programa simple "Console.WriteLine (new Rectangle(). Area());" con la clase dada arriba, Excepcional solo me da un error para Console.WriteLine (...) (System.IO.IOException no capturado) pero no para la llamada a Area() ... Al revés, esto sería útil, pero de esta manera no hay ninguna mejora ... – Korexio

+1

No importa, encontré el problema: no solucioné el problema en el método Area(), por lo que Exceptional ignoró la llamada. Agregar documentación a Área() lleva a una advertencia en Principal (...). – Korexio

+0

Sin el problema descrito anteriormente (http://exceptionalplugin.codeplex.com/workitem/9632) Excepcional parece una herramienta útil. ¡Aún hay otras sugerencias de herramientas bienvenidas! – Korexio

Cuestiones relacionadas