-1

我想知道,是否有可能捕获异常并打印出哪个命令产生了异常。我知道我可以做到这一点,如果我将每个命令都发送出去或将异常分成几部分。但我想知道我是否可以进行 1 次大尝试/捕获并打印出导致异常的确切命令。

例如,这是我的代码的一部分:

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", "");
    }

我有一个空指针异常,但我必须调试它以找出它发生的位置,我希望它准确地指出它发生的位置。

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)
     }
}

这是a的文档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 回答