代码之家  ›  专栏  ›  技术社区  ›  Vasil Remeniuk

如何强制解释器显示完整的堆栈跟踪?

  •  10
  • Vasil Remeniuk  · 技术社区  · 14 年前


    scala> new CacheMonitoringClient
    javax.management.InstanceNotFoundException: com.bea:Name=DomainRuntimeService,Type=weblogic.management.beanservers.domainrun
    time.DomainRuntimeServiceMBean
            at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:195)
            at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:224)
            at javax.management.remote.rmi.RMIConnectionImpl_921_WLStub.getAttribute(Unknown Source)
            at weblogic.management.remote.common.RMIConnectionWrapper$11.run(ClientProviderBase.java:498)
            at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
            at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
            at weblogic.security.Security.runAs(Security.java:61)
            at weblogic.management.remote.common.RMIConnectionWrapper.getAttribute(ClientProviderBas...
    

    作为我使用的解决方法 try { new CacheMonitoringClient } catch { case ex => ex.printStackTrace} (显式地包装抛出我感兴趣的异常的调用),但是那真的很难看。。。

    2 回复  |  直到 14 年前
        1
  •  19
  •   Daniel C. Sobral    14 年前

    使用 lastException 如果你只想要一件事:

    scala> 1 / 0
    java.lang.ArithmeticException: / by zero
        at .<init>(<console>:12)
        at .<clinit>(<console>)
        at RequestResult$.<init>(<console>:9)
        at RequestResult$.<clinit>(<console>)
        at RequestResult$scala_repl_result(<console>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
        at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
        at scala.util.control.Exception$Catch.apply(Exception.scala:79)
        at scal...
    scala> lastException.printStackTrace
    java.lang.ArithmeticException: / by zero
        at line101$object$$iw$$iw$$iw$$iw$$iw$$iw$.<init>(<console>:12)
        at line101$object$$iw$$iw$$iw$$iw$$iw$$iw$.<clinit>(<console>)
        at RequestResult$line101$object$.<init>(<console>:9)
        at RequestResult$line101$object$.<clinit>(<console>)
        at RequestResult$line101$object.scala_repl_result(<console>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
        at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
        at scala.util.control.Exception$Catch.apply(Exception.scala:79)
        at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1.apply(Interpreter.scala:980)
        at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1.apply(Interpreter.scala:980)
        at scala.util.control.Exception$Catch.apply(Exception.scala:79)
        at scala.tools.nsc.Interpreter$Request.loadAndRun(Interpreter.scala:979)
        at scala.tools.nsc.Interpreter.loadAndRunReq$1(Interpreter.scala:578)
        at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:597)
        at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:575)
        at scala.tools.nsc.InterpreterLoop.reallyInterpret$1(InterpreterLoop.scala:471)
        at scala.tools.nsc.InterpreterLoop.interpretStartingWith(InterpreterLoop.scala:514)
        at scala.tools.nsc.InterpreterLoop.command(InterpreterLoop.scala:361)
        at scala.tools.nsc.InterpreterLoop.processLine$1(InterpreterLoop.scala:242)
        at scala.tools.nsc.InterpreterLoop.repl(InterpreterLoop.scala:248)
        at scala.tools.nsc.InterpreterLoop.main(InterpreterLoop.scala:558)
        at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:72)
        at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
    

    或设置 settings.maxPrintString 设置为0,但这也会改变正常结果的打印方式。

    scala> settings.maxPrintString = 0
    
    scala> 1 /0
    java.lang.ArithmeticException: / by zero
        at .<init>(<console>:12)
        at .<clinit>(<console>)
        at RequestResult$.<init>(<console>:9)
        at RequestResult$.<clinit>(<console>)
        at RequestResult$scala_repl_result(<console>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
        at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
        at scala.util.control.Exception$Catch.apply(Exception.scala:79)
        at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1.apply(Interpreter.scala:980)
        at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1.apply(Interpreter.scala:980)
        at scala.util.control.Exception$Catch.apply(Exception.scala:79)
        at scala.tools.nsc.Interpreter$Request.loadAndRun(Interpreter.scala:979)
        at scala.tools.nsc.Interpreter.loadAndRunReq$1(Interpreter.scala:578)
        at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:597)
        at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:575)
        at scala.tools.nsc.InterpreterLoop.reallyInterpret$1(InterpreterLoop.scala:471)
        at scala.tools.nsc.InterpreterLoop.interpretStartingWith(InterpreterLoop.scala:514)
        at scala.tools.nsc.InterpreterLoop.command(InterpreterLoop.scala:361)
        at scala.tools.nsc.InterpreterLoop.processLine$1(InterpreterLoop.scala:242)
        at scala.tools.nsc.InterpreterLoop.repl(InterpreterLoop.scala:248)
        at scala.tools.nsc.InterpreterLoop.main(InterpreterLoop.scala:558)
        at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:72)
        at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
    
        2
  •  0
  •   Synesso    14 年前

    你试过了吗

    trace on