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

その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 に答える
0

いくつかのこと: - 私が知る限り、デッドロックはデータベース要求でデッドロックをキャッチします。readFile が何をしているのかはわかりませんが、データベースにクエリを実行しているようには聞こえません。- メソッド startLengthyOperation (および end) は、長い操作中にマウス カーソルを砂時計のように見せるためにあります。

readFile が何をするかわからない。AsciiIO と TextIO について考えると、通常は何かを読み取るため、readFile 内でそれを行っているとしか思えません。私はこれらのチェックを行う傾向があります: ファイルパスが空以外のものかどうかをチェックします。FileIOPermission を使用して、読み取りまたは書き込みをアサートします。ファイルパスを入力として、AsciiIO または TextIO オブジェクトのインスタンスを作成します。オブジェクトが有効かどうかを確認し、有効でない場合はユーザーに警告します。

これがお役に立てば幸いです。もしそうなら、投票してください。

于 2011-01-15T17:14:50.173 に答える