| Summary: | JDI thread evaluations (Error: Exception processing async thread queue) | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | [Eclipse Project] JDT | Reporter: | Ralf Hauser <hauser> | ||||||||||||
| Component: | Debug | Assignee: | JDT-Debug-Inbox <jdt-debug-inbox> | ||||||||||||
| Status: | VERIFIED FIXED | QA Contact: | |||||||||||||
| Severity: | normal | ||||||||||||||
| Priority: | P3 | CC: | daniel_megert, darin.eclipse, francisu, hauser, igorlord, krzysztof.daniel, lysathor, mhilpert, Michael_Rennie, rewagner, rocketnewton | ||||||||||||
| Version: | 3.3.2 | ||||||||||||||
| Target Milestone: | 3.6.1 | ||||||||||||||
| Hardware: | PC | ||||||||||||||
| OS: | Windows Vista | ||||||||||||||
| Whiteboard: | |||||||||||||||
| Attachments: |
|
||||||||||||||
|
Description
Ralf Hauser
just upgraded to ganymede v3.4 Build id: M20090211-1700 and it still happens at slightly different code locations !SUBENTRY 1 org.eclipse.jdt.debug 4 120 2009-05-24 07:58:51.040 !MESSAGE Exception processing async thread queue !STACK 0 java.lang.NullPointerException at org.eclipse.jdt.internal.debug.eval.ast.engine.ASTInstructionCompiler.visit(ASTInstructionCompiler.java:3153) at org.eclipse.jdt.core.dom.QualifiedName.accept0(QualifiedName.java:167) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.core.dom.ASTNode.acceptChild(ASTNode.java:2525) at org.eclipse.jdt.core.dom.ReturnStatement.accept0(ReturnStatement.java:136) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:2548) at org.eclipse.jdt.core.dom.Block.accept0(Block.java:136) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.core.dom.ASTNode.acceptChild(ASTNode.java:2525) at org.eclipse.jdt.core.dom.MethodDeclaration.accept0(MethodDeclaration.java:502) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:2548) at org.eclipse.jdt.core.dom.TypeDeclaration.accept0(TypeDeclaration.java:484) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:2548) at org.eclipse.jdt.core.dom.CompilationUnit.accept0(CompilationUnit.java:214) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.internal.debug.eval.ast.engine.ASTEvaluationEngine.createExpressionFromAST(ASTEvaluationEngine.java:413) at org.eclipse.jdt.internal.debug.eval.ast.engine.ASTEvaluationEngine.getCompiledExpression(ASTEvaluationEngine.java:229) at org.eclipse.jdt.internal.debug.eval.ast.engine.ASTEvaluationEngine.evaluate(ASTEvaluationEngine.java:114) at org.eclipse.jdt.internal.debug.ui.JavaWatchExpressionDelegate$EvaluationRunnable.run(JavaWatchExpressionDelegate.java:144) at org.eclipse.jdt.internal.debug.core.model.JDIThread$ThreadJob.run(JDIThread.java:2614) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) !SUBENTRY 1 org.eclipse.jdt.debug 4 120 2009-05-24 07:58:51.040 !MESSAGE Exception processing async thread queue !STACK 0 java.lang.NullPointerException at org.eclipse.jdt.internal.debug.eval.ast.engine.ASTInstructionCompiler.getTypeId(ASTInstructionCompiler.java:3769) at org.eclipse.jdt.internal.debug.eval.ast.engine.ASTInstructionCompiler.visit(ASTInstructionCompiler.java:1583) at org.eclipse.jdt.core.dom.Assignment.accept0(Assignment.java:308) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.core.dom.ASTNode.acceptChild(ASTNode.java:2525) at org.eclipse.jdt.core.dom.ExpressionStatement.accept0(ExpressionStatement.java:144) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:2548) at org.eclipse.jdt.core.dom.Block.accept0(Block.java:136) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.core.dom.ASTNode.acceptChild(ASTNode.java:2525) at org.eclipse.jdt.core.dom.MethodDeclaration.accept0(MethodDeclaration.java:502) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:2548) at org.eclipse.jdt.core.dom.TypeDeclaration.accept0(TypeDeclaration.java:484) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:2548) at org.eclipse.jdt.core.dom.CompilationUnit.accept0(CompilationUnit.java:214) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2478) at org.eclipse.jdt.internal.debug.eval.ast.engine.ASTEvaluationEngine.createExpressionFromAST(ASTEvaluationEngine.java:413) at org.eclipse.jdt.internal.debug.eval.ast.engine.ASTEvaluationEngine.getCompiledExpression(ASTEvaluationEngine.java:229) at org.eclipse.jdt.internal.debug.eval.ast.engine.ASTEvaluationEngine.evaluate(ASTEvaluationEngine.java:114) at org.eclipse.jdt.internal.debug.ui.JavaWatchExpressionDelegate$EvaluationRunnable.run(JavaWatchExpressionDelegate.java:144) at org.eclipse.jdt.internal.debug.core.model.JDIThread$ThreadJob.run(JDIThread.java:2614) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) Can you provide a sample watch expression/program that cause this problem? Created attachment 173636 [details]
TestCase
I know it is not a minimal testcase, but I do not dare to reduce it further. The watch expression looks like that:
Test.par.new Result(b).toString();
The Result has protected constructor and therefore is not accessible in Watch view. I am not sure howto fix it.
Created attachment 174366 [details]
patch
This patch adds null checks in the AST instruction compiler to report errors, abort evaluations and avoid NPEs when bindings cannot be resolved.
(In reply to comment #3) > Created an attachment (id=173636) [details] > TestCase > I know it is not a minimal testcase, but I do not dare to reduce it further. > The watch expression looks like that: > Test.par.new Result(b).toString(); > The Result has protected constructor and therefore is not accessible in Watch > view. I am not sure howto fix it. In this particular case the field Test.par is not visible, so the compiler is not providing a binding for the Result constructor. There's nothing the evaluation engine can do but abort (unless JDT were to provide the constructor binding). Created attachment 174367 [details]
updated patch with NLS strings
Created attachment 174374 [details]
Patch backported to 3.4 stream
Has this patch made it into a build yet? I'd like to be able to download the plugins affected by this patch so I can make a patch for 3.4.2 Thanks, Ross (In reply to comment #8) > Has this patch made it into a build yet? No, the patch is not in a build yet. *** Bug 249241 has been marked as a duplicate of this bug. *** *** Bug 282548 has been marked as a duplicate of this bug. *** *** Bug 318298 has been marked as a duplicate of this bug. *** *** Bug 234769 has been marked as a duplicate of this bug. *** Bug 320000 was created for a 3.4.2+ fix. Bug 320004 was created for a 3.5.2+ patch. Created attachment 174414 [details]
patch
patch for 3.6.1
Released to HEAD (3.7) and 3.6.1 Can someone please verify this bug against M20100825-0800. Thanks. Verified. The fix no longer throws NPEs for non-visible members. *** Bug 318544 has been marked as a duplicate of this bug. *** |