【问题标题】:java.lang.ArithmeticException thrown without stack trace and without messagejava.lang.ArithmeticException 抛出没有堆栈跟踪和消息
【发布时间】:2018-01-12 06:36:32
【问题描述】:
@Override
public StreamObserver<MdtDialoutArgs> mdtDialout(StreamObserver<MdtDialoutArgs> responseObserver) {

    return new StreamObserver<MdtDialoutArgs>() {

        @Override
        public void onError(Throwable t) {
            logger.warn( "Encountered error in mdtDialout");
        }

        @Override
        public void onCompleted() {
            responseObserver.onCompleted();
        }

        @Override
        public void onNext(MdtDialoutArgs arg0) {
           try {
                ....
                ....
                ...
          } catch (Exception e) {
               logger.error(e.getMessage(), e);
          }
     }

上面的代码抛出一个 java.lang.ArithmeticException 没有堆栈跟踪和消息。我没有在 try 块中创建/抛出空的 ArithmeticException。 什么 java 方法调用/代码可以抛出 java.lang.ArithmeticException 而没有堆栈跟踪且没有错误消息?

之前有没有人在 java 中看到 ArithmeticException 而没有任何消息? 日志输出:

null java.lang.ArithmeticException

【问题讨论】:

  • 您使用的是哪个日志框架?您需要将异常记录为作为异常,以便框架记录堆栈跟踪。此外,您省略了所有可能包含算术问题的代码。所以我们不能帮助你。记录完整的异常,然后edit 你的帖子包含堆栈跟踪和导致异常的代码。
  • 没有打印堆栈跟踪并且 e.getMessage 为空.. 这是 log4j 框架。我看到带有堆栈跟踪的其他异常。我的问题:有没有人在 java 中看到 ArithmeticException 之前没有消息?
  • 没有打印堆栈跟踪,因为在您的 catch (Exception e) 块中您没有打印它,您只记录一个带有异常消息的错误而不是堆栈跟踪。这就是为什么我询问您正在使用哪个 looger 框架来查找用于记录包含堆栈跟踪的异常的 API。
  • 我正在调查一个没有堆栈跟踪的java.lang.ArithmeticException: null @suresh 你有没有想过这个问题?

标签: java exception grpc-java


【解决方案1】:

对于一些频繁抛出的异常,JVM 会进行优化以隐藏堆栈跟踪。 当服务器重新启动时,该异常的堆栈跟踪将再次显示。

优化版

java.lang.ArithmeticException: null

重启后

java.lang.ArithmeticException: / 处为零 java.math.BigDecimal.divideAndRound(BigDecimal.java:4106) 在 java.math.BigDecimal.divide(BigDecimal.java:5153)

您可以添加VM选项-XX:-OmitStackTraceInFastThrow来关闭此优化。

【讨论】:

    【解决方案2】:

    来自Javadoc

    当出现异常算术条件时抛出 ArithmeticException 已经发生了。例如,一个整数“除以零”会抛出一个 这个类的实例。可以构造 ArithmeticException 对象 被虚拟机当作suppression were disabled and/or the stack trace was not writable

    您是否以独特的方式在该块中构造 Throwable 对象?

    【讨论】:

    • 我没有抛出任何异常或可抛出的对象。
    猜你喜欢
    • 2015-08-04
    • 1970-01-01
    • 2018-09-02
    • 2021-06-02
    • 2016-01-28
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多