-1

どのコマンドが例外を発生させたかを正確にキャッチして例外を出力することは可能でしょうか。すべてのコマンドをセラウンド化するか、例外を部分に分割すれば、それができることはわかっています。しかし、1 つの大きな try/catch を作成して、例外の原因となった正確なコマンドを出力できるかどうか疑問に思っていました。

たとえば、これは私のコードの一部です:

try{
        if(da.StartBlngConnection() == null)
            return handler.generateUpdateStatusResponse(request, "got exception in npUpdateStatus" , "ERROR", "6084");

        System.out.println(request.getNpgRequestId() + " - " + LOG_TAG + "- RequestReceived:\n\n" + requestWrapper.toString());

        da.DBLog("npUpdateStatus(Requst)", new Date(), requestWrapper.toString(), request.getNpgRequestId() , request.getOldOperator(), request.getNewOperator(), "" ,"", "");
        response = handler.handleUpdateStatus(request);
        responseWrapper = new com.tzar.wrappers.UpdateStatusResponseWrapper(response);
        da.DBLog("npUpdateStatus(Response)", new Date(), responseWrapper.toString(), request.getNpgRequestId() , request.getOldOperator(), request.getNewOperator(), response.getMessageStatus().getRequestStatus() + " :" + response.getMessageStatus().getRequestReasonMessage(), "", ""); //
        return response;
    }
    catch(Exception e){ 
        System.out.println( request.getNpgRequestId() + " - " + LOG_TAG +" GotException: " + e);
        da.DBLog("npUpdateStatus(Exception)", new Date(), requestWrapper.toString(), request.getNpgRequestId() , request.getOldOperator(), request.getNewOperator(), MakeSureNotOutOfRange(e.toString(),4000) ,"", "");
        return handler.generateUpdateStatusResponse(request, "got exception in npUpdateStatus" , "ERROR", "");
    }

null ポインター例外が発生しましたが、どこで発生したかを確認するためにデバッグする必要がありました。発生した場所を正確に指摘したいと考えています。

タイ

4

2 に答える 2

2
catch(Exception e) {
     // do stuff...
     e.printStackTrace(System.err);
}

これにより、それがどの行にあったかが正確にわかります。に印刷されSystem.errます。ファイルなどに出力したい場合は、ファイルSystem.errへのライターに変更するだけです。

あなたも試すことができます:

catch(Exception e) {
     // do stuff...
     for (StackTraceElement el : e.getStackTrace()) {
         // do stuff with the element (i.e. send to log)
     }
}

のドキュメントは次のとおりですStackTraceElement

于 2013-07-07T15:00:04.277 に答える
1

を使用e.printStacktTrace()するだけで、完全なスタック トレースがコンソールに出力されます。次のコマンドを使用して、正確な行番号を取得することもできます。

e.getStackTrace()[0].getLineNumber();

0 番目の要素はスタックの一番上です。以下も使用できます。

e.getStackTrace()[0].getMethodName();

メソッドを取得します。

いくつかの例外を除いて、スタックをいくらか下げる必要があることに注意してください。そんで使うe.printStackTrace()

于 2013-07-07T15:03:45.107 に答える