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, указав путь к файлу. Проверьте, является ли объект действительным, и если нет, предупредите пользователя.
Надеюсь, это поможет, и если да, пожалуйста, проголосуйте.