Java 如何在uiautomator测试强制转换上定位OutOfMemoryError异常点

Java 如何在uiautomator测试强制转换上定位OutOfMemoryError异常点,java,android,debugging,android-uiautomator,Java,Android,Debugging,Android Uiautomator,我的uiautomator项目有一个OOM异常,但错误堆栈没有提到我的任何代码,如何找出错误点?以下是日志: 143|root@aries:/ # uiautomator runtest /sdcard/test.jar -c com.simple.test .test1 mator runtest /sdcard/test.jar -c com.simple.test.test1 < INSTRUMENTATION_STATUS: numtests=1 INSTR

我的uiautomator项目有一个OOM异常,但错误堆栈没有提到我的任何代码,如何找出错误点?以下是日志:

143|root@aries:/ # uiautomator runtest /sdcard/test.jar -c com.simple.test
.test1
mator runtest /sdcard/test.jar -c com.simple.test.test1             <
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.simple.test.test1:
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=testStart
INSTRUMENTATION_STATUS: class=com.simple.test.test1
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: stream=
Test results for WatcherResultPrinter=.Test run aborted due to unexpected except
ion: Failed to allocate a 15748050 byte allocation with 10501096 free bytes and
10MB until OOM
java.lang.OutOfMemoryError: Failed to allocate a 15748050 byte allocation with 1
0501096 free bytes and 10MB until OOM
        at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.j
ava:95)
        at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:12
5)
        at java.lang.StringBuffer.append(StringBuffer.java:278)
        at java.io.StringWriter.write(StringWriter.java:123)
        at java.io.PrintWriter.doWrite(PrintWriter.java:623)
        at java.io.PrintWriter.write(PrintWriter.java:601)
        at java.io.PrintWriter.write(PrintWriter.java:579)
        at java.io.PrintWriter.write(PrintWriter.java:641)
        at java.io.PrintWriter.print(PrintWriter.java:453)
        at java.io.PrintWriter.println(PrintWriter.java:549)
        at junit.runner.BaseTestRunner.getFilteredTrace(BaseTestRunner.java:306)

        at junit.runner.BaseTestRunner.getFilteredTrace(BaseTestRunner.java:277)

        at com.android.uiautomator.testrunner.UiAutomatorTestRunner$WatcherResul
tPrinter.addError(UiAutomatorTestRunner.java:319)
        at junit.framework.TestResult.addError(TestResult.java:43)
        at junit.framework.TestResult.runProtected(TestResult.java:142)
        at junit.framework.TestResult.run(TestResult.java:118)
        at junit.framework.TestCase.run(TestCase.java:124)
        at com.android.uiautomator.testrunner.UiAutomatorTestRunner.start(UiAuto
matorTestRunner.java:160)
        at com.android.uiautomator.testrunner.UiAutomatorTestRunner.run(UiAutoma
torTestRunner.java:96)
        at com.android.commands.uiautomator.RunTestCommand.run(RunTestCommand.ja
va:91)
        at com.android.commands.uiautomator.Launcher.main(Launcher.java:83)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:251)

Time: 24.346

FAILURES!!!
Tests run: 1,  Failures: 0,  Errors: 1
143|root@aries:/#uiautomator runtest/sdcard/test.jar-c com.simple.test
.test1
mator runtest/sdcard/test.jar-c com.simple.test.test1<
仪器状态:numtests=1
仪器状态:流=
com.simple.test.test1:
仪表状态:id=UiAutomatorTestRunner
仪器状态:测试=测试启动
仪器状态:class=com.simple.test.test1
仪表状态:当前=1
仪表状态代码:1
仪器状态:流=
WatcherResultPrinter=的测试结果。由于意外的异常,测试运行中止
ion:无法分配15748050字节分配,其中10501096个可用字节和
10MB到OOM
java.lang.OutOfMemoryError:无法使用1分配15748050字节的分配
0501096可用字节和10MB直到OOM
位于java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.j
ava:95)
位于java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:12
5)
在java.lang.StringBuffer.append处(StringBuffer.java:278)
位于java.io.StringWriter.write(StringWriter.java:123)
位于java.io.PrintWriter.doWrite(PrintWriter.java:623)
在java.io.PrintWriter.write(PrintWriter.java:601)
在java.io.PrintWriter.write(PrintWriter.java:579)
在java.io.PrintWriter.write(PrintWriter.java:641)
在java.io.PrintWriter.print(PrintWriter.java:453)
在java.io.PrintWriter.println(PrintWriter.java:549)
位于junit.runner.BaseTestRunner.getFilteredTrace(BaseTestRunner.java:306)
位于junit.runner.BaseTestRunner.getFilteredTrace(BaseTestRunner.java:277)
位于com.android.uiautomator.testrunner.UiAutomatorTestRunner$WatcherResul
tpinter.addError(UiAutomatorTestRunner.java:319)
位于junit.framework.TestResult.addError(TestResult.java:43)
位于junit.framework.TestResult.runProtected(TestResult.java:142)
运行(TestResult.java:118)
运行(TestCase.java:124)
在com.android.uiautomator.testrunner.UiAutomatorTestRunner.start(UiAuto
matorTestRunner.java:160)
在com.android.uiautomator.testrunner.UiAutomatorTestRunner.run(UiAutoma
torTestRunner.java:96)
位于com.android.commands.uiautomator.RunTestCommand.run(RunTestCommand.ja
弗吉尼亚州:91)
位于com.android.commands.uiautomator.Launcher.main(Launcher.java:83)
位于com.android.internal.os.RuntimeInit.nativeFinishInit(本机方法)
位于com.android.internal.os.RuntimeInit.main(RuntimeInit.java:251)
时间:24.346
失败!!!
测试运行:1,失败:0,错误:1

或者我如何一步一步地调试带有断点的uiautomator项目?谢谢。

java.lang.OutOfMemoryError:未能分配15748050字节的分配,10501096个空闲字节和10MB,直到OOM
似乎您正试图一次将一个巨大的文本文件全部加载到内存中。正如下面的Mayuso答案中间接指出的那样,您的应用程序似乎正在为StringBuilder分配大量内存。在循环或字符串连接中查找StringBuilder.append调用(java优化以使用StringBuilder)。谢谢,我知道错误堆栈告诉了我什么,但我的项目中有很多代码,重点是它没有在错误堆栈中提到我的任何代码,上面提到的所有方法都属于uiautomator本身。我不知道我的代码出了什么问题。再次感谢。考虑到junit.framework.TestResult.addError,我的想法是,当它试图告诉一个包含大消息的错误时,是否会发生错误?