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