java-转换为Dalvik失败-某处未初始化的变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-转换为Dalvik失败-某处未初始化的变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2161字,纯文字阅读大概需要4分钟。
内容图文
![java-转换为Dalvik失败-某处未初始化的变量](/upload/InfoBanner/zyjiaocheng/657/bd9c5ec9ff47476f9fc9166131df4ec6.jpg)
我正在尝试将我的Android应用程序与使用Free Pascal编译的JAR链接.我收到以下构建错误:
[2012-09-14 16:08:38 - MyApp] Dx
EXCEPTION FROM SIMULATION:
[2012-09-14 16:08:38 - MyApp] Dx local 0009: invalid
[2012-09-14 16:08:38 - Yarxi] Dx ...at bytecode offset 00015f2c
locals[0000]: Lcom/mypackage/$Core$$_fpc_nestedvars$70;
locals[0001]: I
locals[0002]: I
locals[0003]: I
locals[0004]: I
locals[0005]: I
locals[0006]: I
locals[0007]: I
locals[0008]: I
locals[0009]: <invalid>
locals[000a]: <invalid>
(..more locals... much more)
locals[06db]: <invalid>
stack[0003]: I
stack[0002]: I
stack[0001]: [I
stack[top0]: int{0x00000000 / 0}
...while working on block 5f23
...while working on method $MyMethod$944$FPR1:(Lcom/mypackage/$Core$$_fpc_nestedvars$70;)V
...while processing $MyMethod$944$FPR1 (Lcom/mypackage/$Core$$_fpc_nestedvars$70;)V
...while processing com/mypackage/Core.class
[2012-09-14 16:08:40 - MyApp] Dx 1 error; aborting
[2012-09-14 16:08:40 - MyApp] Conversion to Dalvik format failed with error 1
错误似乎是在某些时候,代码尝试读取未初始化的本地0009.
现在,Pascal不再强制执行局部变量的初始化.有可能,初始化首先被省略了.我保留了Free Pascal为我生成的JVM程序集文件.那些与Jasmin一起组装到类文件中.该文件很大-我不在这里粘贴.
有人可以帮我追溯错误的根源吗?错误发生在字节码偏移量00015f2c处.有没有办法将其转换回装配文件行号?
解决方法:
解决.实际上,00015f2c(十进制为89900)是方法中的字节码偏移量.我做了以下.
首先,我直接调用Jasmin,传递生成的.j文件和-g选项(生成行号):
java -jar %JASM% -g Core.j
Free Pascal本身不会发出-g.这给了我另一个Core.class文件,其中包含行号,行号相对于FPC生成的.j文件.然后,我使用javap将类反汇编为另一个.j文件:
"%JDKROOT%\javap" -l -c Core.class >Core_WithLines.j
但是,这个新的.j文件包含每个单独命令的行号和偏移量.然后,我在令人反感的方法中搜索了偏移量89900(注意:偏移量,由javap生成,在65536处换行).然后,我查看了该方法的主体下面的LineNumberTable(偏移量和行号都包含在内),在源Core.j文件中找到了与此偏移量相对应的行号.回头看一下Core.j,有一条注释包含Pascal源代码的行号.
确实有一个函数调用传递了一个未初始化的变量-但作为var参数.
该问题是Pascal / JVM边界问题.该变量尚未初始化,但已由ref传递到要从后者返回的函数中.编译器应该以某种方式将其抽象出来,恕我直言,但FPC没有.
内容总结
以上是互联网集市为您收集整理的java-转换为Dalvik失败-某处未初始化的变量全部内容,希望文章能够帮你解决java-转换为Dalvik失败-某处未初始化的变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。