如果 HWASan 没有给我任何信息,我如何追踪 Android 上的内存问题?

问题描述 投票:0回答:1

我有一个基于 Android NDK 的游戏,我们部分使用开源引擎 (Cocos2d-x) 的部分构建该游戏。大多数引擎都是自定义的,但对于 OpenGL 上下文设置、Java 桥接和事件等内容,我们发现使用现成的解决方案很方便。

快进到今天,我们遇到了稳定性问题,cocos2d-x 不再维护,我们遇到了一些严重的稳定性问题。我花了大约 1 周的时间对此进行调试,但未能找到追踪它的方法。这是我尝试过的

  • 使用它附带的旧NDK进行编译
  • 尽可能旧地更改 SDK
  • 使用 HWASan
  • 设置检查JNI
  • 尝试审核所有 JNI 桥代码

崩溃的方式差异很大

  • 当连接到调试器时,它会在第一秒内崩溃。几乎总是在 Android 运行时中。多次围绕垃圾收集或涉及 JNI 桥
  • 不连接调试器时,有时会稳定。
  • 当连接 HWASan 时,如果 OpenGL 设置为在手机上使用它,它偶尔会在 ANGLE 库中崩溃
  • 有时图形内存会简单地泄漏并最终导致崩溃,而有时则根本不会泄漏

我还想说,该应用程序在除 Android 之外的所有其他平台上都非常稳定,并且我们 95% 的代码都在共享 C++ 中。我什至注释掉了在 C++ 中实际启动我们的代码,但游戏仍然在黑屏上崩溃,只有开箱即用的引擎代码。

我正在考虑移植到 SDL,这样引擎至少会得到支持,但如果有人有任何关于追踪此类事情的提示,我会很高兴听到它。

java android c++ android-ndk cocos2d-x
1个回答
0
投票

你可以检查这个链接,它在记忆中的讨论中 https://github.com/google/sanitizers/wiki/AddressSanitizerInHardware

© www.soinside.com 2019 - 2024. All rights reserved.