Dynamics Axe 2009, Обработка исключений - PullRequest
5 голосов
/ 14 января 2011

В моем коде 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 ]

5 голосов
/ 05 мая 2011

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

0 голосов
/ 28 февраля 2011

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

throw error(AifUtil::getClrErrorMessage());

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

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

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

0 голосов
/ 15 января 2011

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

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

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

...