Java 转换到Dalvik失败-未初始化变量

Java 转换到Dalvik失败-未初始化变量,java,android,jvm,dalvik,jasmin,Java,Android,Jvm,Dalvik,Jasmin,我正在尝试将我的Android应用程序与一个用免费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/m

我正在尝试将我的Android应用程序与一个用免费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
[2012-09-1416:08:38-MyApp]Dx
模拟的例外情况:
[2012-09-14 16:08:38-MyApp]Dx local 0009:无效
[2012-09-14 16:08:38-Yarxi]Dx…字节码偏移量00015f2c处
本地人[0000]:Lcom/mypackage/$Core$$\u fpc\u nestedvars$70;
本地人[0001]:I
本地人[0002]:I
本地人[0003]:I
本地人[0004]:I
本地人[0005]:I
本地人[0006]:I
本地人[0007]:I
本地人[0008]:I
本地人[0009]:
本地人[000a]:
(…更多本地人…更多)
本地人[06db]:
堆栈[0003]:I
堆栈[0002]:I
堆栈[0001]:[I
堆栈[top0]:int{0x00000000/0}
…在第5f23区工作时
…在处理方法$MyMethod$944$FPR1时:(Lcom/mypackage/$Core$$\u fpc\u nestedvars$70;)V
…在处理$MyMethod$944$FPR1(Lcom/mypackage/$Core$$\u fpc\u nestedvars$70;)时
…在处理com/mypackage/Core.class时
[2012-09-14 16:08:40-MyApp]Dx 1错误;正在中止
[2012-09-14 16:08:40-MyApp]转换为Dalvik格式失败,错误为1
错误似乎是在某个时刻,代码试图读取未初始化的本地0009

现在,Pascal不强制初始化局部变量。很有可能,初始化一开始就被忽略了。我保留了Free Pascal为我生成的JVM汇编文件。这些文件与Jasmin一起汇编到类文件中。文件很大-我不会粘贴到这里

有人能帮我把错误点追溯到源代码吗?错误在字节码偏移量00015f2c处。有没有办法把它转换回汇编文件行号?

已解决。00015f2c(89900十进制)确实是方法中的字节码偏移量。我做了以下操作

首先,我直接调用Jasmin,传递生成的.j文件和-g选项(生成行号):

Free Pascal本身不发出-g。这给了我一个可选的Core.class文件,其中包含行号,行号与FPC生成的.j文件相对。然后我使用
javap
将该类反汇编回另一个.j文件:

"%JDKROOT%\javap" -l -c Core.class >Core_WithLines.j
但是这个新的.j文件包含每个命令的行号和偏移量。然后,我在有问题的方法中搜索偏移量89900(注意:偏移量,由
javap
生成,在65536处换行)。然后,我查看了该方法主体下方的行号表(偏移量和行号换行),在源Core.j文件中找到了与此偏移量对应的行号。回顾Core.j,有一条注释包含Pascal源的行号

确实,有一个函数调用传递了一个未初始化的变量,但作为
var
参数


这个问题有点像Pascal/JVM的边界问题。变量未初始化,但它通过ref传递到一个函数中,由后者返回。编译器应该以某种方式将其抽象掉,IMHO,但FPC没有。

是否使用
-Tandroid
编译?
"%JDKROOT%\javap" -l -c Core.class >Core_WithLines.j