gpt4 book ai didi

android - dalvik VM VFY代码的含义

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:07 25 4
gpt4 key购买 nike

有人可以向我解释一下运行我的 Android 应用程序时以下警告的含义(警告按给定的顺序输出):

04-17 15:29:11.693: I/dalvikvm(4442): DexOpt: access denied from Lcom/kirona/iclient/db/core/services/impl/MiscDatabaseModuleDaoImpl; to field Lcom/kirona/iclient/database/common/impl/AbstractDatabaseModuleDao;.logger
04-17 15:29:11.653: W/dalvikvm(4442): VFY: unable to resolve static field 30 (logger) in Lcom/kirona/iclient/db/core/services/impl/MiscDatabaseModuleDaoImpl;
04-17 15:29:11.653: D/dalvikvm(4442): VFY: replacing opcode 0x62 at 0x0001
04-17 15:29:11.693: D/dalvikvm(4442): VFY: dead code 0x0046-006e in Lcom/kirona/iclient/db/core/services/impl/MiscDatabaseModuleDaoImpl;.getSequenceNextVal (Ljava/lang/String;)J

应用程序似乎运行良好,但我需要了解这个问题,因为我们有更复杂的应用程序,具有类似的错误,导致 dalvikvm 崩溃。

最佳答案

问题似乎是 MiscDatabaseModuleDaoImpl 类试图访问 AbstractDatabaseModuleDao.logger 字段,但由于访问限制(即私有(private)、 protected , ETC。)。在这种情况下,访问该字段的 sget-object 操作码(操作码 0x62)被替换为抛出验证异常的操作码,如果执行这可能会导致运行时崩溃。

此外,最后一条消息引用了 MiscDatabaseModuleDaoImpl.getSequenceNextVal 方法中的无效代码。这是无害的——它不会在运行时引起任何问题。但是,找出死代码的确切内容并将其删除并不是一个坏主意。您可以使用 baksmali 和 --code-offsets 选项反汇编您的应用程序,然后查看该方法的反汇编。 --code-offsets 选项将在包含偏移量的每条指令之前添加注释。根据错误消息,从 0x46 到 0x6e 的偏移量是死代码。附近还应该有 .line 指令,这将是原始 java 文件中的相应行号。

关于android - dalvik VM VFY代码的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com