5 Stimmen

Dynamics Ax 2009, Ausnahmebehandlung

In meinem X++ Code habe ich folgendes

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 stoße auf den letzten Haken (vorher habe ich keine Meldung über Ausnahmen erhalten). Ich möchte aber wissen, was WIRKLICH passiert und die Ausnahme verursacht. Wie kann ich herausfinden, was die Ausnahme ist?

5voto

Michael Brown Punkte 2231

Sie könnten StackTrace zum Infoprotokoll hinzufügen und fügen Sie eine Informationsmeldung hinzu, wenn Sie den letzten Fang erreicht haben. Das würde Ihnen genau zeigen, was der Code zu dem Zeitpunkt getan hat, als er die Catch-Funktion erreichte.

0voto

Skaue Punkte 763

Ein paar Dinge: - Deadlock fängt, soweit ich weiß, Deadlocks in Datenbankanfragen ab. 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) sind dazu da, den Mauszeiger wie eine Sanduhr aussehen zu lassen, die die lange Operation durchläuft.

Ich bin mir nicht sicher, was die readFile-Funktion bewirkt. Wenn ich an AsciiIO und TextIO denke, lesen sie normalerweise in etwas, also kann ich nur annehmen, dass Sie das innerhalb readFile tun. Ich neige dazu, diese Überprüfungen durchzuführen: Prüfen Sie, ob der 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. Prüfen Sie, ob das Objekt gültig ist, und wenn nicht, warnen Sie den Benutzer.

Ich hoffe, das hilft Ihnen, und wenn ja, dann stimmen Sie bitte ab.

0voto

10p Punkte 5238

Es könnte leicht sein Exception::CLRError In diesem Fall können Sie das Problem sehen, indem Sie den Fehler erneut auslösen:

throw error(AifUtil::getClrErrorMessage());

oder Exception::Internal und dann etwas wie:

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X