我遇到了一个很难调试的StackOverFlowError,由于堆栈跟踪的深度有限,我无法找到问题的根源。
是否有可能像-XX:MaxJavaStackTraceDepth=1000000一样增加安卓系统的-XX:MaxJavaStackTraceDepth=1000000?
我不确定这是否有趣,但下面是当前的堆栈跟踪:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.StackOverflowError
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.childrenAccept(Unknown Source)
at org.nfunk.jep.EvaluatorVisitor.visit(Unknown Source)
at org.nfunk.jep.ASTFunNode.jjtAccept(Unknown Source)
at org.nfunk.jep.SimpleNode.chi谢谢
发布于 2015-07-08 15:28:14
由于日志记录系统的限制,而不是堆栈深度的限制,输出被切断了。最简单的方法是减少设备上的堆栈深度,使其更快地失败,堆栈跟踪符合4K日志消息。
如果自己创建线程,则可以在线程构造函数中配置堆栈大小。看起来这可能是由线程池创建的,因此您需要提供一个使用ThreadFactory的适当构造函数。
有一次,我为android.util.Log编写了一个修补程序,它检测到了这种情况,并去掉了跟踪的中间部分,留下了开始和结束,但我从未使它做好生产准备。
https://stackoverflow.com/questions/31292872
复制相似问题