【发布时间】:2012-04-27 19:45:43
【问题描述】:
在处理了几个请求后,我的 Eclipse 开始使用 processWorkerExit() 方法。
根据link,我知道如何抑制 Eclipse 的中断,但是有什么原因导致代码在这条线上中断。这种情况会不会有内存泄漏?
Tomcat 7.0.27
Eclipse 3.7.2
JDK 7.0.02
【问题讨论】:
标签: java debugging tomcat thread-safety breakpoints
在处理了几个请求后,我的 Eclipse 开始使用 processWorkerExit() 方法。
根据link,我知道如何抑制 Eclipse 的中断,但是有什么原因导致代码在这条线上中断。这种情况会不会有内存泄漏?
Tomcat 7.0.27
Eclipse 3.7.2
JDK 7.0.02
【问题讨论】:
标签: java debugging tomcat thread-safety breakpoints
答案在这里:OpenJDK breaks on processWorkerExit with no breakpoint
默认情况下,在 Eclipse 的调试模式下,未捕获异常中断是 检查。由于您在这里没有 catch 方法,因此很可能是 未捕获的异常被抛出,调试器正在中断 你在抛出异常之前。你可以在 Java->Debug 下的首选项。
【讨论】:
调试器在该行停止的原因是try{} 块中的代码抛出了异常,并且该特定代码行是抛出异常后的下一个可执行代码行。您几乎可以肯定在控制台窗口中看到该异常的堆栈跟踪,因为默认情况下,冒泡到Thread.run() 的未捕获异常将被发送到stderr。
至于您关于是否可能存在内存泄漏(或更可能是 Java,资源泄漏)的问题:答案是肯定的,可能。但是该代码中没有任何内容表明存在 。如果有这样的泄漏,几乎可以肯定是因为task 实现中的异常处理不正确。
【讨论】:
我遇到了同样的问题。如果您没有记录异常,它会在您的 try/catch 子句中中断。尝试像这样向 LogCat 插入断点或输出:
try
{
//HERE I'VE PUT ALL THE FUNCTIONS THAT WORK FOR ME
Log.e("tag", "Sth passed!");
}
catch (Exception e)
{
//The task failed
Log.e("tag", e.getMessage());
}
如果您没有 try/catch 块,请将其放在上面的代码中。在 LogCat 中,您可以看到在异常之前运行的最后一行代码,它将帮助您定位代码中的错误,如下所示:
08-28 05:49:52.321: E/SQLiteDatabase(834): at java.lang.Thread.run(Thread.java:841)
【讨论】: