2011-01-14 2 views
5

В моем коде х ++ У меня есть следующийDynamics AX 2009, Exception Handling

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

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

ответ

5

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

0

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

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

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

0

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

throw error(AifUtil::getClrErrorMessage()); 

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

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

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