Java开发人员的日常调试情况是抛出异常,然后您需要深入研究调试器以找出抛出的内容.通常,您会尝试在抛出异常之前设置一些断点,并希望您能够确定导致该异常的情况.
在Eclipse中,断点可以定义一个表达式,只有当变量x等于值y时才会触发断点.我的问题是,是否可以定义某种全局表达式,一旦抛出异常,它就被调试器捕获,允许程序员立即检查所有变量?理想情况下,您还没有遇到catch块,Eclipse将捕获引发的异常并停止执行而不更改堆栈内容.
这是可能的还是受JVM的限制?
我在高流量网站上使用Hibernate 3.6.8,ehcache 2.4.5(也尝试过最新的2.8.0),jvm 1.6.0_22,有时我会体验
ObjectNotFoundException:不存在具有给定标识符的行:[com.example.Foo#123]`
Foo通过最简单的代码创建一个新的(在这种情况下为id 123):
Foo foo = new Foo();
session.save(foo);
Run Code Online (Sandbox Code Playgroud)
原因是在这个高流量网站的所有页面中,我得到Foo的是这样的:
session.createQuery("from Foo").setCacheable(true).list();
Run Code Online (Sandbox Code Playgroud)
存储Foos 的表包含1000行,实体缓存在ehcache中:
<class-cache class="com.example.Foo" usage="read-write" />
Run Code Online (Sandbox Code Playgroud)
我的Hibernate配置的其他可能相关的部分是:
<property name="connection.url">jdbc:mysql://localhost:3306/example?characterEncoding=UTF-8</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">60</property>
<property name="hibernate.c3p0.min_size">10</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.timeout">0</property>
<property name="hibernate.c3p0.acquireRetryAttempts">1</property>
<property name="hibernate.c3p0.acquireRetryDelay">1</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.use_sql_comments">true</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.jdbc.use_scrollable_resultset">true</property>
<property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</property>
<property name="net.sf.ehcache.configurationResourceName">/ehcache.xml</property>
<property name="hibernate.cache.use_query_cache">true</property>
Run Code Online (Sandbox Code Playgroud)
错误发生一次然后消失.我怀疑ehcache查询缓存是使用新的实体id(123)id更新的,但实体缓存尚未使用该实体的内容进行更新.我使用JMeter在本地轻松地重现了这一点.
关于如何解决这个问题的任何想法?
在Foo创作时,ObjectNotFoundException抛出一次.另一方面,如果我删除了一个实例,Foo那么我经常(并且永远)得到ObjectNotFoundException每次执行.list().堆栈跟踪可以在http://pastebin.com/raw.php?i=dp3HBgDB …
我正在使用Eclipse Juno编写Java程序.
当我运行程序,并且它遇到异常时,程序就会死回跟踪.我将这些异常断点设置为在任何意外异常时进行调试.
ExceptionThrowableError但是,无论如何,我仍然看到一些未被捕获的异常只是让程序崩溃而不是Eclipse中断.我想打破任何未被捕获的例外.但我找不到选择所有例外的选项.如何让Eclipse在任何异常中中断?
在尝试调试我的多线程应用程序时偶尔会出现以下情况.我运行该程序,然后发生一个错误,导致一个有用的消息出现在日志猫...但只有大约四分之一秒才滚出窗口顶部,因为看似永无止境的流 - 如此有用的错误消息涌入窗口.然后我拼命地试图抓住垂直滚动条(现在正在摇晃),以便在窗口缓冲区变得太满以至于丢弃之前将原始错误消息定位到窗口中.
必须有一个更好的方法......是否有一个"stop-logging-now"命令/按钮,我可以在错误开始出现时立即命中?
您想在哪里捕获异常以及为什么?
我很有兴趣看到人们发现将try/catch块放在哪里是有用的,希望可能出现一些通用模式.我将用C++发布我的两个示例答案,但任何语言都可以.
请回答一个位置和原因.谢谢.
architecture error-handling design-patterns exception error-reporting
我的项目有问题,经过一些测试后我认为它与源无关.即使回到以前工作的版本,当我尝试部署到Tomcat时仍然会出错.
该错误是org.springframework.beans.factory.BeanDefinitionStoreException由java.lang.ClassFormatError消息Truncated类文件引起的.
我已经开始通过从等式中删除Eclipse来缩小问题,但即使使用maven命令行构建并直接部署到我的tomcat实例,我仍然会遇到同样的问题.人们建议清除tomcat工作和临时目录,谷歌搜索错误,我没有运气.
我知道这不是很多信息,但假设问题不在我的代码中,对我的系统进行哪些更改可能会导致此问题突然显现?
堆栈跟踪
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [beans.xml]; nested exception is java.lang.ClassFormatError: Truncated class file
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:239)
... 54 more
Caused by: java.lang.ClassFormatError: Truncated class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at org.apache.xbean.spring.context.v2c.XBeanQNameHelper.loadClass(XBeanQNameHelper.java:102)
at org.apache.xbean.spring.context.v2c.XBeanQNameHelper.getBeanInfo(XBeanQNameHelper.java:72)
at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.getPropertyDescriptor(XBeanNamespaceHandler.java:581)
at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.addAttributeProperties(XBeanNamespaceHandler.java:333)
at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseBeanFromExtensionElement(XBeanNamespaceHandler.java:225)
at …Run Code Online (Sandbox Code Playgroud) 我是这个项目的新手,它的代码没有任何记录器声明.遵循任何流程都是单调乏味且耗时的.
由于应用程序的异常处理框架,所有异常都属于一个常见的异常块,从那里追溯是非常麻烦的.
是否有任何Eclipse插件可以帮助我调试问题?我正在寻找类似于XCode的调试功能,它会停止导致异常的行的流量.你可以追溯到那个.
更新了我的问题.
注意:我正在使用Eclipse Juno并在开发AspectJ日志记录实用程序的过程中帮助我调试语句.
eclipse ×4
java ×4
exception ×2
android ×1
architecture ×1
breakpoints ×1
concurrency ×1
debugging ×1
ehcache ×1
hibernate ×1
ide ×1
spring ×1
tomcat ×1