DEDEYUAN.COM演示站

时间:2024-09-10 14:44  编辑:admin

  mt5量化交易此模式适合在测试期间用作HWASan的更快替代方案开始,构修您的第一个利用。然后,通过咱们的培训课程更长远地解析闭连常识,或者自行探求利用开拓。

  解析奈何遵循 Google 的显着典型化向导,针对您的利用场景构修利用。

  获取一款合用于 Android、Material Design 或 Wear OS 的 Figma 套件,即刻滥觞打算利用界面。

  利用 Gemini API 等构修 AI 赋能的 Android 利用。

  本文档先容了奈何正在 MTE 下运转 Android 利用。如需解析奈何利用 MTE 举办 Android 平台开拓,请参阅AOSP 文档。

  MTE 是用于调试和削减内存毛病的众众用具之一。如需扼要解析全盘用具,请参阅调试和削减内存毛病。

  内存安静 bug 是指以原生编程谈话收拾内存时碰到的毛病,是常睹的代码题目。这类题目会导致安静毛病和稳固性题目。

  从 Android 13 滥觞,局限修设救援 MTE。如需搜检修设是否正在运转时启用了 MTE,请运转以下夂箢:

  有些修设默认不启用 MTE,但允诺开拓者正在从头启动后启用 MTE。这是一种尝试性修设,不创议用于通例用处,由于它或者会低落修设机能或稳固性,但对付利用开拓很有效。如需访谒此形式,请正在“树立”利用中次第赶赴开拓者选项“Memory Tagging Extension”。倘若编造未列出此选项,则展现您的修设不救援以这种方法启用 MTE。

  MTE 救援两种形式:SYNC 和 ASYNC。SYNC 形式可供应更牢靠的诊断音信,所以更合用于开拓方针,而 ASYNC 形式的高机能使其可能用于已揭晓的利用。

  此形式针对可调试性而非机能举办了优化,可能正在可给与较高机能开销的境况下用作正确的 bug 检测用具。启用后,MTE SYNC 可能动作有用的安静缓解方法。

  倘若记号不行亲,收拾器会正在收到违规的加载或存储指令时终止过程,并返回 SIGSEGV(si_code 为 SEGV_MTESERR)以及相闭内存访谒和阻碍地方的完全音信。

  此形式适合正在测试岁月用作HWASan的更疾代替计划,此时您无需从头编译代码;或当您的利用呈现保存毛病的受攻击面时正在临蓐境遇中利用。另外,当 ASYNC 形式(详睹下文)浮现 bug 时,可能通过利用运转时 API 将奉行切换到 SYNC 形式,来获取切实的 bug 申诉。

  另外,正在 SYNC 形式下运转时,Android 分拨器会记实每次分拨和勾销分拨的栈房轨迹,并行使这些音信供应更好的毛病申诉,此中蕴涵对内存毛病的说明(比如开释后利用或缓冲区溢出),以及闭连内存事变的栈房轨迹(如需解析详情,请参阅解析 MTE 申诉)。与 ASYNC 形式比拟,此类申诉可供应更众上下文音信,并简化 bug 跟踪和修复。

  此形式特意针对 bug 申诉的机能(而非正确度)举办了优化,可用于对内存安静 bug 举办低开销检测。倘若记号不行亲,收拾器会接连奉行,直到抵达近来的内核条件(比如,编造挪用或计时器隔绝)。这时,收拾器会通过 SIGSEGV(代码为 SEGV_MTEAERR)终止过程,而不会记实毛病地方或内存访谒。

  此形式适合正在临蓐境遇中对颠末肃穆测试的代码库(已知其内存安静 bug 的密度较低)低落内存安静毛病,这将通过正在测试岁月利用 SYNC 形式来杀青。

  举办尝试时,倘若利用未正在清单文献中指定任何值(或指定default),可能通过利用兼容性转移为该利用树立memtagMode属性的默认值。

  您可能正在全体树立菜单中的“编造”>

  “高级”>

  “开拓者选项”>

  “利用兼容性转移”下找到闭连更改。树立NATIVE_MEMTAG_ASYNC或NATIVE_MEMTAG_SYNC可为特定利用启用 MTE。

  当为application记号树立了该属性时,该属性会影响利用利用的全盘过程,而且可能通过树立process记号来为各个过程替代该属性。

  如前所述,启用 MTE 有帮于检测修设上的 当地堆。为了检测栈房上的内存损坏,除了启用 MTE,则必要利用插桩从头构修代码。通过 天生的利用只可正在救援 MTE 的修设上运转。

  启用 MTE 后,请照常利用和测试利用。倘若检测到内存安静题目,利用将会破产,并供应相仿于以下实质的 Tombstone(请细心,SYNC 形式下,返回的SIGSEGV代码为SEGV_MTESERR;ASYNC 形式下,代码为SEGV_MTEAERR):

  如需解析详情,请参阅 AOSP 文档中的解析 MTE 申诉。您还可能利用 Android Studio 调试利用,调试步调会正在导致内存访谒无效的行结束。

  如要对并非通过通例编造分拨器分拨的内存利用 MTE,您必要修削分拨器以记号内存和指针。

  全盘记号的分拨都必要 16 字节对齐,由于记号只可分拨给 16 字节的区块(也称为 granule)。

  然后,正在返回指针之前,您必要利用IRG指令天生随机记号并将其存储正在指针中。

  请细心,较旧的 CPU 不救援这些指令,所以启用 MTE 后,您必要有条目地运转这些指令。您可能搜检过程是否启用了 MTE:

  本页面上的实质和代码示例受实质许可局限所述许可的局限。Java 和 OpenJDK 是 Oracle 和/或其相闭公司的注册招牌。