2011-01-14 22 views
5

例外処理私はDynamics AXの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(); 
} 

次私は(前に、私は例外についてのメッセージを取得していなかった)、最終的なキャッチを打っていました。しかし、私は本当に何が起こっているのかを知りたいし、例外を引き起こしています。例外の内容を知るにはどうすればよいですか?

答えて

5

add stackTrace to the info logとすると、最後のキャッチに行くと情報メッセージを追加できます。これは、コードがcatchに到達した時点で行っていたことを正確に示します。

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()のコードを表示する必要があります。あなたのコードをデバッグしているときに、エラーの原因となっている行は何ですか?

関連する問題