2011-01-14 54 views
5

在我的X ++代码,我有以下动态2009年斧,异常处理

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来断言读取或写入。 使用filepath作为输入创建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()的代码。当你调试你的代码时,哪行会导致错误?