2011-01-14 6 views
5

Nel mio codice x ++ Ho il seguenteDynamics AX 2009, Gestione delle eccezioni

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(); 
} 

sto colpendo il fermo finale (prima, mi stavo alcun messaggio sulle eccezioni). Ma voglio sapere cosa sta davvero succedendo e causando l'eccezione. Come posso scoprire cos'è l'eccezione?

risposta

5

È possibile add stackTrace to the info log e aggiungere un messaggio informativo quando si arriva all'ultima ripresa. Questo ti mostrerebbe esattamente cosa stava facendo il codice nel momento in cui ha raggiunto la presa.

0

Un paio di cose: - Il deadlock, per quanto ne so, cattura i deadlock nelle richieste del database. Non sono sicuro di ciò che readFile sta facendo, ma non sembra come interrogare il database. - I metodi startLengthyOperation (e end) sono lì per rendere il cursore del mouse simile alla clessidra che esegue l'operazione di lengty.

Non so cosa faccia il file di lettura. Quando penso ad AsciiIO e TextIO normalmente leggono qualcosa, quindi posso solo presumere che lo stai facendo all'interno di readFile. Tendo a fare questi controlli: Controlla se pathpath è qualcosa di diverso da vuoto. Utilizzare FileIOPermission per asserire leggere o scrivere. Creare l'istanza dell'oggetto AsciiIO o TextIO con il percorso file come input. Verificare se l'oggetto è valido e se non avvisare l'utente.

Spero che questo aiuti e, in caso affermativo, si prega di votare.

0

Si potrebbe facilmente essere Exception::CLRError, nel qual caso per vedere il problema si può scegliere di ri-lanciare l'errore:

throw error(AifUtil::getClrErrorMessage()); 

o Exception::Internal, quindi qualcosa di simile:

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

o Exception::CodeAccessSecurity o qualsiasi altra cosa - prima dovresti mostrare il codice da this.readFile(). Quando esegui il debug del tuo codice, quale riga sta causando l'errore?