NativeExceptions have ugly stack traces
---------------------------------------

                 Key: JRUBY-3890
                 URL: http://jira.codehaus.org/browse/JRUBY-3890
             Project: JRuby
          Issue Type: Bug
          Components: Java Integration
            Reporter: Rib Rdb
            Priority: Minor
         Attachments: diff

When a NativeException is raised, the stack trace is incredibly difficult to 
read. It has way too much information about the JRuby details, and often is 
missing the top frame or two of ruby code.  For example, here's the trace I 
would like to see for an exception I got today:

 java.lang.ExceptionInInitializerError: null
    sun/reflect/NativeConstructorAccessorImpl.java:-2:in `newInstance0'
    sun/reflect/NativeConstructorAccessorImpl.java:39:in `newInstance'
    sun/reflect/DelegatingConstructorAccessorImpl.java:27:in `newInstance'
    java/lang/reflect/Constructor.java:513:in `newInstance'
    java/lang/Class.java:355:in `newInstance0'
    java/lang/Class.java:308:in `newInstance'
    java/security/Provider.java:1221:in `newInstance'
    javax/crypto/DashoA13*..:-1:in `a'
    javax/crypto/DashoA13*..:-1:in `init'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/appengine-jruby-0.0.2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/jruby/openssl/builtin.rb:185:in
 `create_mac'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/appengine-jruby-0.0.2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/jruby/openssl/builtin.rb:154:in
 `initialize'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/appengine-jruby-0.0.2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/jruby/openssl/builtin.rb:144:in
 `hexdigest'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/activesupport-2.3.3/lib/active_support/message_verifier.rb:43:in
 `generate_digest'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/activesupport-2.3.3/lib/active_support/message_verifier.rb:37:in
 `generate'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/actionpack-2.3.3/lib/action_controller/session/cookie_store.rb:151:in
 `marshal'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/actionpack-2.3.3/lib/action_controller/session/cookie_store.rb:100:in
 `call'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/actionpack-2.3.3/lib/action_controller/reloader.rb:29:in
 `call'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/actionpack-2.3.3/lib/action_controller/failsafe.rb:26:in
 `call'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/rack-1.0.0/lib/rack/lock.rb:11:in
 `call'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/actionpack-2.3.3/lib/action_controller/dispatcher.rb:106:in
 `call'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/jruby-rack-0.9.4.jar!/rack/handler/servlet.rb:17:in
 `call'
    :1

Instead, I get the monstrosity below. Notice that create_mac is missing, and 
the line number here is particularly important in this case.
Also most of these java frames are just the implementation details of the ruby 
frames at the bottom.

 java.lang.ExceptionInInitializerError: null
    sun/reflect/NativeConstructorAccessorImpl.java:-2:in `newInstance0'
    sun/reflect/NativeConstructorAccessorImpl.java:39:in `newInstance'
    sun/reflect/DelegatingConstructorAccessorImpl.java:27:in `newInstance'
    java/lang/reflect/Constructor.java:513:in `newInstance'
    java/lang/Class.java:355:in `newInstance0'
    java/lang/Class.java:308:in `newInstance'
    java/security/Provider.java:1221:in `newInstance'
    javax/crypto/DashoA13*..:-1:in `a'
    javax/crypto/DashoA13*..:-1:in `init'
    sun/reflect/NativeMethodAccessorImpl.java:-2:in `invoke0'
    sun/reflect/NativeMethodAccessorImpl.java:39:in `invoke'
    sun/reflect/DelegatingMethodAccessorImpl.java:25:in `invoke'
    java/lang/reflect/Method.java:597:in `invoke'
    org/jruby/javasupport/JavaMethod.java:302:in `invokeWithExceptionHandling'
    org/jruby/javasupport/JavaMethod.java:263:in `invoke'
    org/jruby/java/invokers/InstanceMethodInvoker.java:47:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:278:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:117:in `call'
    org/jruby/ast/CallOneArgNode.java:57:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/ast/BlockNode.java:71:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:136:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:135:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:258:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:77:in `call'
    org/jruby/ast/VCallNode.java:85:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/ast/BlockNode.java:71:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:229:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:175:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:308:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:166:in `callBlock'
    org/jruby/runtime/callsite/CachingCallSite.java:171:in `call'
    org/jruby/RubyClass.java:622:in `call'
    org/jruby/internal/runtime/methods/DynamicMethod.java:172:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:298:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:157:in `call'
    org/jruby/ast/CallTwoArgNode.java:59:in `interpret'
    org/jruby/ast/CallOneArgNode.java:57:in `interpret'
    org/jruby/ast/CallNoArgNode.java:61:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:247:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:183:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:318:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:197:in `call'
    org/jruby/ast/CallThreeArgNode.java:61:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/ast/BlockNode.java:71:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:173:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:151:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:278:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:117:in `call'
    org/jruby/ast/FCallOneArgNode.java:36:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/ast/EvStrNode.java:86:in `interpret'
    org/jruby/ast/DStrNode.java:86:in `appendToString'
    org/jruby/ast/DStrNode.java:76:in `buildDynamicString'
    org/jruby/ast/DStrNode.java:68:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/ast/BlockNode.java:71:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:173:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:151:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:278:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:117:in `call'
    org/jruby/ast/CallOneArgNode.java:57:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:173:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:151:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:278:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:117:in `call'
    org/jruby/ast/FCallOneArgNode.java:36:in `interpret'
    org/jruby/ast/LocalAsgnNode.java:123:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/ast/BlockNode.java:71:in `interpret'
    org/jruby/ast/IfNode.java:112:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/ast/BlockNode.java:71:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:173:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:151:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:278:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:117:in `call'
    org/jruby/ast/CallOneArgNode.java:57:in `interpret'
    org/jruby/ast/ToAryNode.java:69:in `interpret'
    org/jruby/ast/MultipleAsgnNode.java:116:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/ast/BlockNode.java:71:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:173:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:151:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:278:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:117:in `call'
    org/jruby/ast/CallOneArgNode.java:57:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/ast/RescueNode.java:225:in `executeBody'
    org/jruby/ast/RescueNode.java:147:in `interpretWithJavaExceptions'
    org/jruby/ast/RescueNode.java:110:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:173:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:151:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:278:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:117:in `call'
    org/jruby/ast/CallOneArgNode.java:57:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/runtime/InterpretedBlock.java:218:in `evalBlockBody'
    org/jruby/runtime/InterpretedBlock.java:169:in `yield'
    org/jruby/runtime/Block.java:194:in `yield'
    org/jruby/libraries/ThreadLibrary.java:150:in `synchronize'
    
org/jruby/libraries/org/jruby/libraries/ThreadLibrary$Mutex$i_method_0_0$RUBYINVOKER$synchronize.gen:-1:in
 `call'
    org/jruby/runtime/callsite/CachingCallSite.java:268:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:86:in `callBlock'
    org/jruby/runtime/callsite/CachingCallSite.java:91:in `call'
    org/jruby/ast/CallNoArgBlockNode.java:64:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/ast/BlockNode.java:71:in `interpret'
    org/jruby/ast/EnsureNode.java:96:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:173:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:151:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:278:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:117:in `call'
    org/jruby/ast/CallOneArgNode.java:57:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:173:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:151:in `call'
    org/jruby/runtime/callsite/CachingCallSite.java:278:in `cacheAndCall'
    org/jruby/runtime/callsite/CachingCallSite.java:117:in `call'
    org/jruby/ast/CallOneArgNode.java:57:in `interpret'
    org/jruby/ast/CallOneArgNode.java:57:in `interpret'
    org/jruby/ast/NewlineNode.java:104:in `interpret'
    org/jruby/internal/runtime/methods/InterpretedMethod.java:173:in `call'
    org/jruby/internal/runtime/methods/DefaultMethod.java:151:in `call'
    org/jruby/RubyClass.java:530:in `finvoke'
    org/jruby/javasupport/util/RuntimeHelpers.java:410:in `invoke'
    org/jruby/RubyBasicObject.java:315:in `callMethod'
    org/jruby/javasupport/JavaEmbedUtils.java:143:in `callMethod'
    org/jruby/rack/DefaultRackApplication.java:70:in `__call'
    org/jruby/rack/DefaultRackApplication.java:40:in `call'
    org/jruby/rack/servlet/DefaultServletDispatcher.java:33:in `process'
    org/jruby/rack/RackFilter.java:53:in `doFilter'
    org/mortbay/jetty/servlet/ServletHandler.java:1084:in `doFilter'
    com/google/apphosting/utils/servlet/TransactionCleanupFilter.java:43:in 
`doFilter'
    org/mortbay/jetty/servlet/ServletHandler.java:1084:in `doFilter'
    com/google/appengine/tools/development/StaticFileFilter.java:124:in 
`doFilter'
    org/mortbay/jetty/servlet/ServletHandler.java:1084:in `doFilter'
    org/mortbay/jetty/servlet/ServletHandler.java:360:in `handle'
    org/mortbay/jetty/security/SecurityHandler.java:216:in `handle'
    org/mortbay/jetty/servlet/SessionHandler.java:181:in `handle'
    org/mortbay/jetty/handler/ContextHandler.java:712:in `handle'
    org/mortbay/jetty/webapp/WebAppContext.java:405:in `handle'
    com/google/apphosting/utils/jetty/DevAppEngineWebAppContext.java:54:in 
`handle'
    org/mortbay/jetty/handler/HandlerWrapper.java:139:in `handle'
    com/google/appengine/tools/development/JettyContainerService.java:313:in 
`handle'
    org/mortbay/jetty/handler/HandlerWrapper.java:139:in `handle'
    org/mortbay/jetty/Server.java:313:in `handle'
    org/mortbay/jetty/HttpConnection.java:506:in `handleRequest'
    org/mortbay/jetty/HttpConnection.java:830:in `headerComplete'
    org/mortbay/jetty/HttpParser.java:514:in `parseNext'
    org/mortbay/jetty/HttpParser.java:211:in `parseAvailable'
    org/mortbay/jetty/HttpConnection.java:381:in `handle'
    org/mortbay/io/nio/SelectChannelEndPoint.java:396:in `run'
    org/mortbay/thread/BoundedThreadPool.java:442:in `run'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/appengine-jruby-0.0.2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/jruby/openssl/builtin.rb:154:in
 `initialize'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/appengine-jruby-0.0.2.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/jruby/openssl/builtin.rb:144:in
 `hexdigest'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/activesupport-2.3.3/lib/active_support/message_verifier.rb:43:in
 `generate_digest'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/activesupport-2.3.3/lib/active_support/message_verifier.rb:37:in
 `generate'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/actionpack-2.3.3/lib/action_controller/session/cookie_store.rb:151:in
 `marshal'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/actionpack-2.3.3/lib/action_controller/session/cookie_store.rb:100:in
 `call'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/actionpack-2.3.3/lib/action_controller/reloader.rb:29:in
 `call'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/actionpack-2.3.3/lib/action_controller/failsafe.rb:26:in
 `call'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/rack-1.0.0/lib/rack/lock.rb:11:in
 `call'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/gems.jar!/gems/actionpack-2.3.3/lib/action_controller/dispatcher.rb:106:in
 `call'
    
file:/Users/woodie/Desktop/my-app/WEB-INF/lib/jruby-rack-0.9.4.jar!/rack/handler/servlet.rb:17:in
 `call'
    :1


The attached patch would at least help clean up some of the redundant java 
trace lines.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to