2011-01-14 11 views
5

In meinem x ++ Code, den ich habe folgendeDynamics Ax 2009 Ausnahmebehandlung

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

ich den endgültige Fang bin schlagen (vor, ich hatte keine Nachricht über Ausnahmen bekommen). Aber ich möchte wissen, was WIRKLICH passiert und die Ausnahme verursacht. Wie kann ich herausfinden, was die Ausnahme ist?

Antwort

5

Sie könnten add stackTrace to the info log und eine Info-Nachricht hinzufügen, wenn Sie zum letzten Fang kommen. Das würde Ihnen genau zeigen, was der Code zu dem Zeitpunkt tat, als er den Haken erreichte.

0

Ein paar Dinge: - Deadlock, soweit ich weiß, fängt Deadlocks in Datenbankanforderungen. Ich bin mir nicht sicher, was readFile macht, aber es klingt nicht so, als würde es die Datenbank abfragen. - Die Methoden startLengthyOperation (und end) dienen dazu, den Mauszeiger während der lengty-Operation wie die Sanduhr aussehen zu lassen.

Nicht sicher, was die readFile tut. Wenn ich an AsciiIO und TextIO denke, lesen sie normalerweise etwas, also kann ich nur annehmen, dass Sie das in readFile tun. Ich tendiere dazu, diese Prüfungen durchzuführen: Überprüfen Sie, ob Dateipfad etwas anderes als leer ist. Verwenden Sie FileIOPermission, um das Lesen oder Schreiben zu bestätigen. Erstellen Sie die Instanz des AsciiIO- oder TextIO-Objekts mit dem Dateipfad als Eingabe. Überprüfen Sie, ob das Objekt gültig ist und ob der Benutzer nicht benachrichtigt wird.

Hoffe das hilft, und wenn ja, bitte stimme.

0

Es könnte leicht Exception::CLRError sein, wobei in diesem Fall das Problem zu sehen, Sie wieder werfen die Fehler wählen könnten:

throw error(AifUtil::getClrErrorMessage()); 

oder Exception::Internal, dann so etwas wie:

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

oder Exception::CodeAccessSecurity oder irgendetwas anderes - Sie müssten zuerst den Code von this.readFile() anzeigen. Wenn Sie Ihren Code debuggen, welche Zeile verursacht den Fehler?

Verwandte Themen