Dynamics Axe 2009, Обработка исключений

В моем коде x++ у меня есть следующее

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

Я попал в последний улов (до этого я не получал сообщений об исключениях). Но я хочу знать, что ДЕЙСТВИТЕЛЬНО происходит и вызывает исключение. Как я могу узнать, что является исключением?

3 ответа

Решение

Вы можете добавить stackTrace в информационный журнал и добавить информационное сообщение, когда доберетесь до последнего улова. Это покажет вам, что именно делает код во время достижения цели.

Это может быть легко Exception::CLRError, в этом случае, чтобы увидеть проблему, вы можете повторно выдать ошибку:

throw error(AifUtil::getClrErrorMessage());

или же Exception::Internalтогда что-то вроде:

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

или же Exception::CodeAccessSecurity или что-то еще - вам нужно показать код от this.readFile() первый. Когда вы отлаживаете код, какая строка вызывает ошибку?

Пара вещей: - насколько я знаю, тупик ловит тупики в запросах к базе данных. Не уверен, что делает readFile, но это не похоже на запросы к базе данных. - Методы startLengthyOperation (и end) предназначены для того, чтобы курсор мыши выглядел как песочные часы во время операции lengty.

Не уверен, что делает readFile. Когда я думаю об AsciiIO и TextIO, они обычно читают что-то, поэтому я могу только предположить, что вы делаете это в readFile. Я склонен делать эти проверки: Проверить, является ли filepath чем-то отличным от пустого. Используйте FileIOPermission для подтверждения чтения или записи. Создайте экземпляр объекта AsciiIO или TextIO, указав путь к файлу. Проверьте, является ли объект действительным, и если нет, предупредите пользователя.

Надеюсь, это поможет, и если да, пожалуйста, проголосуйте.

Другие вопросы по тегам