2011-01-14 63 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()的代碼。當你調試你的代碼時,哪行會導致錯誤?