5

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

我达到了最后的目标(之前,我没有收到有关异常的消息)。但我想知道真正发生了什么并导致异常。我怎样才能找出异常是什么?

4

3 回答 3

5

您可以将 stackTrace 添加到信息日志中,并在您到达最后一个捕获时添加一条信息消息。这将准确地向您显示代码在到达捕获点时正在做什么。

于 2011-05-05T14:35:29.523 回答
0

有几件事: - 据我所知,死锁会捕获数据库请求中的死锁。不确定 readFile 在做什么,但听起来不像是在查询数据库。- 方法 startLengthyOperation(和 end)用于使鼠标光标在冗长操作中看起来像沙漏。

不确定 readFile 的作用。当我想到 AsciiIO 和 TextIO 时,它们通常会读入某些内容,所以我只能假设您是在 readFile 中这样做的。我倾向于做这些检查:检查文件路径是否不是空的。使用 FileIOPermission 断言读取或写入。使用文件路径作为输入创建 AsciiIO 或 TextIO 对象的实例。检查对象是否有效,如果不提醒用户。

希望这会有所帮助,如果有,请投票。

于 2011-01-15T17:14:50.173 回答
0

可能很容易Exception::CLRError,在这种情况下看到问题你可以选择重新抛出错误:

throw error(AifUtil::getClrErrorMessage());

或者Exception::Internal,然后类似:

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

Exception::CodeAccessSecurity其他任何东西-您需要首先显示代码this.readFile()。当您调试代码时,哪一行导致错误?

于 2011-02-28T20:58:14.770 回答