2011-01-14 19 views
5

En mi código X ++ Tengo el siguienteDynamics AX 2009, manejo de excepciones

void run() { 
    try 
    { 
     startLengthyOperation(); 
     this.readFile();  
    } 
    catch (Exception::Deadlock) 
    { 
     retry; 
    } 
    catch (Exception::Error) 
    { 
     error(strfmt("An error occured while trying to read the file %1", filename)); 
    } 
    catch 
    { 
     error("An unkown error has occured"); 
    } 

    endLengthyOperation(); 
} 

estoy golpeando la captura final (antes, que estaba recibiendo ningún mensaje sobre excepciones). Pero quiero saber qué está sucediendo REALMENTE y causar la excepción. ¿Cómo puedo averiguar cuál es la excepción?

Respuesta

5

Puede add stackTrace to the info log y agregar un mensaje de información cuando llegue a la última captura. Eso le mostraría exactamente lo que estaba haciendo el código en el momento en que alcanzó la captura.

0

Un par de cosas: - Deadlock, por lo que sé, atrapa los bloqueos en las solicitudes de bases de datos. No estoy seguro de lo que readFile está haciendo, pero no parece que consulte la base de datos. - Los métodos startLengthyOperation (y end) están ahí para hacer que el cursor del mouse se vea como el reloj de arena de la operación de longitud.

No estoy seguro de lo que leeFile hace. Cuando pienso en AsciiIO y TextIO, normalmente leen algo, así que solo puedo suponer que estás haciendo eso en readFile. Tiendo a hacer estas comprobaciones: Compruebe si filepath es algo distinto de empty. Use FileIOPermission para afirmar la lectura o la escritura. Cree la instancia del objeto AsciiIO o TextIO con la ruta de archivo como entrada. Compruebe si el objeto es válido y, si no alerta al usuario.

Espero que esto ayude, y si es así, por favor vote.

0

Podría ser fácilmente Exception::CLRError, en cuyo caso, para ver el problema se podría optar por volver a lanzar el error:

throw error(AifUtil::getClrErrorMessage()); 

o Exception::Internal, entonces algo así como:

System.Exception e = CLRInterop::getLastException(); 
if (e) 
    throw error(e.ToString()); 

o Exception::CodeAccessSecurity o cualquier otra cosa, primero deberías mostrar el código de this.readFile(). Cuando está depurando su código, ¿qué línea está causando el error?

Cuestiones relacionadas