用eclipse调试一些opengles android游戏遇到outofmemoryerror异常

发布于 2025-01-08 16:26:21 字数 4289 浏览 3 评论 0原文

我正在尝试使用 Eclipse 调试一些 Android opengles 足球游戏(我的 Android 设备是 Dell Streak pad)。当游戏进入某些比赛(比如说世界杯比赛)时,Eclipse 调试器确实需要很长时间,并且不幸的是由于内存不足错误异常而失败。

这是崩溃的调用堆栈:

主题 [<1> main](已挂起(OutOfMemoryError 异常)) Bitmap.createBitmap(int, int, Bitmap$Config, boolean) 行:604 Bitmap.createBitmap(int, int, Bitmap$Config) 行:584
ActivityThread.createThumbnailBitmap(ActivityThread$ActivityClientRecord) 线路:2442
ActivityThread.performStopActivityInner(ActivityThread$ActivityClientRecord, ActivityThread$StopInfo,布尔值,布尔值)行:2615 ActivityThread.handleStopActivity(IBinder,布尔值,int)行:2689 ActivityThread.access$800(ActivityThread, IBinder, 布尔值, int) 行: 122 BinderProxy(ActivityThread$H).handleMessage(Message) 行: 分段阅读_第 1038 章 Looper.loop() 行:132 ActivityThread.main(String[]) 行:4123
Method.invokeNative(对象, 对象[], 类, 类[], 类, int, boolean) 行:不可用 [本机方法] Method.invoke(Object, 对象...)行:491 ZygoteInit$MethodAndArgsCaller.run()行:841
ZygoteInit.main(String[])行:599 NativeStart.main(String[]) 行:不可用[本机方法]

守护进程系统线程 [<2> HeapWorker](已挂起(OutOfMemoryError 异常)) BinderInternal$GcWatcher.finalize() 行:48
NativeStart.run() 行:不可用 [本机方法]

主题 [<9> GLThread 10](已挂起(OutOfMemoryError 异常)) GLSurfaceView$GLThread.run() 行:1188

并且还有一些与 logcat 相关的信息:

02-25 15:07:33.931: DEBUG/dalvikvm(17453): threadid=2: still suspended after undo (sc=1 dc=1)
02-25 15:07:33.931: DEBUG/dalvikvm(17453): GC_BEFORE_OOM freed 0K, 1% free 48888K/49159K, paused 414ms
02-25 15:07:33.931: ERROR/dalvikvm-heap(17453): Out of memory on a 62116-byte allocation.
02-25 15:07:33.931: DEBUG/dalvikvm(17453): threadid=9: still suspended after undo (sc=1 dc=1)
02-25 15:07:33.931: INFO/dalvikvm(17453): "main" prio=5 tid=1 RUNNABLE
02-25 15:07:33.931: INFO/dalvikvm(17453):   | group="main" sCount=0 dsCount=0 obj=0x4014b5c8 self=0x125f8
02-25 15:07:33.931: INFO/dalvikvm(17453):   | sysTid=17453 nice=0 sched=0/0 cgrp=default handle=-1342909336
02-25 15:07:33.931: INFO/dalvikvm(17453):   | schedstat=( 0 0 0 ) utm=249 stm=13 core=1
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.graphics.Bitmap.nativeCreate(Native Method)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.graphics.Bitmap.createBitmap(Bitmap.java:604)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.graphics.Bitmap.createBitmap(Bitmap.java:584)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread.createThumbnailBitmap(ActivityThread.java:2442)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:2615)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread.handleStopActivity(ActivityThread.java:2689)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread.access$800(ActivityThread.java:122)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.os.Handler.dispatchMessage(Handler.java:99)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.os.Looper.loop(Looper.java:132)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread.main(ActivityThread.java:4123)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at java.lang.reflect.Method.invokeNative(Native Method)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at java.lang.reflect.Method.invoke(Method.java:491)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at dalvik.system.NativeStart.main(Native Method)

等等。

我尝试直接在我的 Android 设备上运行它,一切似乎都很好,没有崩溃,并且加载和加载所需的时间在可接受的范围内。跑步。我想知道是否是因为vm堆内存不够,所以我尝试增加eclipse.ini中的vm内存值,之后我也关闭了eclipse并重新启动它:

--launcher.XXMaxPermSize 1024m -XX:MaxPermSize =1024m -Xms256m -Xmx1024m

但这不起作用。虽然它在设备上运行良好,但我需要调试游戏匹配断点、单步。如果没有调试,那就很糟糕了。任何对此有所了解的人请帮助我。

注意:我正在设备上调试opengles游戏(正如我提到的dell streak pad),所以模拟器不支持opengles不会有问题。

I'm trying to debug some android opengles soccer game with eclipse(my android device is Dell Streak pad). When the game enters into some match(let's say a worldcup match), the eclipse debugger takes really such a long time, and unfortunately fails with the outofmemoryerror exception.

Here is the call stack for the crash:

Thread [<1> main] (Suspended (exception OutOfMemoryError)) Bitmap.createBitmap(int, int, Bitmap$Config, boolean) line: 604
Bitmap.createBitmap(int, int, Bitmap$Config) line: 584
ActivityThread.createThumbnailBitmap(ActivityThread$ActivityClientRecord)
line: 2442
ActivityThread.performStopActivityInner(ActivityThread$ActivityClientRecord,
ActivityThread$StopInfo, boolean, boolean) line: 2615
ActivityThread.handleStopActivity(IBinder, boolean, int) line: 2689
ActivityThread.access$800(ActivityThread, IBinder, boolean, int)
line: 122 BinderProxy(ActivityThread$H).handleMessage(Message) line:
1038 ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 132 ActivityThread.main(String[]) line: 4123
Method.invokeNative(Object, Object[], Class, Class[], Class, int,
boolean) line: not available [native method] Method.invoke(Object,
Object...) line: 491 ZygoteInit$MethodAndArgsCaller.run() line: 841
ZygoteInit.main(String[]) line: 599 NativeStart.main(String[])
line: not available [native method]

Daemon System Thread [<2> HeapWorker] (Suspended (exception OutOfMemoryError)) BinderInternal$GcWatcher.finalize() line: 48
NativeStart.run() line: not available [native method]

Thread [<9> GLThread 10] (Suspended (exception OutOfMemoryError)) GLSurfaceView$GLThread.run() line: 1188

And there is also some info with the logcat:

02-25 15:07:33.931: DEBUG/dalvikvm(17453): threadid=2: still suspended after undo (sc=1 dc=1)
02-25 15:07:33.931: DEBUG/dalvikvm(17453): GC_BEFORE_OOM freed 0K, 1% free 48888K/49159K, paused 414ms
02-25 15:07:33.931: ERROR/dalvikvm-heap(17453): Out of memory on a 62116-byte allocation.
02-25 15:07:33.931: DEBUG/dalvikvm(17453): threadid=9: still suspended after undo (sc=1 dc=1)
02-25 15:07:33.931: INFO/dalvikvm(17453): "main" prio=5 tid=1 RUNNABLE
02-25 15:07:33.931: INFO/dalvikvm(17453):   | group="main" sCount=0 dsCount=0 obj=0x4014b5c8 self=0x125f8
02-25 15:07:33.931: INFO/dalvikvm(17453):   | sysTid=17453 nice=0 sched=0/0 cgrp=default handle=-1342909336
02-25 15:07:33.931: INFO/dalvikvm(17453):   | schedstat=( 0 0 0 ) utm=249 stm=13 core=1
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.graphics.Bitmap.nativeCreate(Native Method)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.graphics.Bitmap.createBitmap(Bitmap.java:604)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.graphics.Bitmap.createBitmap(Bitmap.java:584)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread.createThumbnailBitmap(ActivityThread.java:2442)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:2615)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread.handleStopActivity(ActivityThread.java:2689)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread.access$800(ActivityThread.java:122)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.os.Handler.dispatchMessage(Handler.java:99)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.os.Looper.loop(Looper.java:132)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at android.app.ActivityThread.main(ActivityThread.java:4123)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at java.lang.reflect.Method.invokeNative(Native Method)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at java.lang.reflect.Method.invoke(Method.java:491)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
02-25 15:07:33.931: INFO/dalvikvm(17453):   at dalvik.system.NativeStart.main(Native Method)

and so on.

I've tried to run it on my android device directly, and things seem to be all right, no crash, and takes acceptable time to load & run. I wonder if it is because the vm heap memory is not enough, so I've tried to increase vm memory value in eclipse.ini, after that I also closed the eclipse and restarted it:

--launcher.XXMaxPermSize 1024m -XX:MaxPermSize=1024m -Xms256m -Xmx1024m

But it doesn't work. Although it runs well on the device, but I need to debug the game match for breakpoints, stepping. Without the debugging, it would be very bad. Anyone who knows sth about this please help me on this.

Note: I am debugging the opengles game on a device(dell streak pad as I mentioned), so there would be no problem with the emulator doesn't support opengles.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忘年祭陌 2025-01-15 16:26:21

模拟器目前无法执行opengl,您只能使用真实设备来测试opengl应用程序。

The emulator can't do opengl at this time, you can only use a real device for testing opengl apps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文