在64位操作系统上使用FlashDevelop的Debug功能
2017-01-13 15:01
260 查看
原文链接:http://zengrong.net/post/1692.htm
最近用上了FlashDevelop。与Flash
Builder比起来,它确实优点很多:小巧,快速,灵活的定制功能,免费且开源。
使用FlashDevelop开发AS/Flex/AIR程序的时候,可以使用Flex SDK来编译和调试。Flex SDK使用JAVA写成,需要系统中安装JAVA虚拟机(JVM)。而我的系统中已经安装了64位的JAVA虚拟机。
在调试的时候,FlashDevelop报告了下面的错误。
Debugger startup error: System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
在 net.sf.jni4net.jni.JNI.Dll.JNI_GetDefaultJavaVMInitArgs(JavaVMInitArgs* args)
在 net.sf.jni4net.jni.JNI.Init()
在 net.sf.jni4net.jni.JNI.CreateJavaVM(JavaVM& jvm, JNIEnv& env, Boolean attachIfExists, String[] options)
在 net.sf.jni4net.Bridge.CreateJVM()
在 net.sf.jni4net.Bridge.CreateJVM(BridgeSetup setup)
在 FlashDebugger.DebuggerManager.Start(Boolean alwaysStart)
FlashDevelop是直接调用Flex SDK中的fdb进行调试的,出现这个错误的原因,是因为fdb仅支持32位的JVM。
可是,JAVA不是平台无关的么?为什么fdb却只能支持32位的JVM?
的确,纯JAVA程序确实是平台无关的,但是调用了JNI就不同了,JNI是受平台限制的。而通过上面的报错信息,明显能看出是JNI在报错。
找到了问题所在,解决起来就容易了。
下面是解决步骤:
安装32位的JVM。JVM是允许32位和64位共存的。
将环境变量JAVA_HOME改为指向32位JVM的安装路径。
搞定。
但是,在64位操作系统中修改JAVA_HOME环境变量指向32位JVM是个愚蠢的做法。因为这样会导致操作系统中默认使用32位的JVM。所以,有个稍微麻烦一点的办法。
安装32位的JVM。我的JVM 32bit安装在
在FlashDevelop.exe文件相同的目录下创建一个startFD.bat文件,写入如下内容:
双击startFD.bat,程序会首先设置JAVA_HOME变量,然后启动FlashDevelop,并关闭cmd窗口。
使用这种方式设置的JAVA_HOME环境变量,只在启动FlashDevelop.exe的时候有效,不会影响系统的已有的环境变量。
网上还能搜到一些其它的解决方案,让我们来看看:
方案1,来源
复制 jre\bin中的msvcr71.dll到Windows\System32下就可以了
这个方案明显是针对32位操作系统的,所以解决不了本文的问题。
方案2,来源
Googling about this problem tells that many users have this in JDK 6 solved with msvcr71.dll, but not for me <img class="emoji" alt="
最近用上了FlashDevelop。与Flash
Builder比起来,它确实优点很多:小巧,快速,灵活的定制功能,免费且开源。
使用FlashDevelop开发AS/Flex/AIR程序的时候,可以使用Flex SDK来编译和调试。Flex SDK使用JAVA写成,需要系统中安装JAVA虚拟机(JVM)。而我的系统中已经安装了64位的JAVA虚拟机。
在调试的时候,FlashDevelop报告了下面的错误。
Debugger startup error: System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
在 net.sf.jni4net.jni.JNI.Dll.JNI_GetDefaultJavaVMInitArgs(JavaVMInitArgs* args)
在 net.sf.jni4net.jni.JNI.Init()
在 net.sf.jni4net.jni.JNI.CreateJavaVM(JavaVM& jvm, JNIEnv& env, Boolean attachIfExists, String[] options)
在 net.sf.jni4net.Bridge.CreateJVM()
在 net.sf.jni4net.Bridge.CreateJVM(BridgeSetup setup)
在 FlashDebugger.DebuggerManager.Start(Boolean alwaysStart)
FlashDevelop是直接调用Flex SDK中的fdb进行调试的,出现这个错误的原因,是因为fdb仅支持32位的JVM。
可是,JAVA不是平台无关的么?为什么fdb却只能支持32位的JVM?
的确,纯JAVA程序确实是平台无关的,但是调用了JNI就不同了,JNI是受平台限制的。而通过上面的报错信息,明显能看出是JNI在报错。
找到了问题所在,解决起来就容易了。
下面是解决步骤:
安装32位的JVM。JVM是允许32位和64位共存的。
将环境变量JAVA_HOME改为指向32位JVM的安装路径。
搞定。
但是,在64位操作系统中修改JAVA_HOME环境变量指向32位JVM是个愚蠢的做法。因为这样会导致操作系统中默认使用32位的JVM。所以,有个稍微麻烦一点的办法。
安装32位的JVM。我的JVM 32bit安装在
C:\Program Files (x86)\Java\jre7目录。
在FlashDevelop.exe文件相同的目录下创建一个startFD.bat文件,写入如下内容:
set JAVA_HOME=C:\Program Files (x86)\Java\jre7 start FlashDevelop.exe
双击startFD.bat,程序会首先设置JAVA_HOME变量,然后启动FlashDevelop,并关闭cmd窗口。
使用这种方式设置的JAVA_HOME环境变量,只在启动FlashDevelop.exe的时候有效,不会影响系统的已有的环境变量。
网上还能搜到一些其它的解决方案,让我们来看看:
方案1,来源
复制 jre\bin中的msvcr71.dll到Windows\System32下就可以了
这个方案明显是针对32位操作系统的,所以解决不了本文的问题。
方案2,来源
Googling about this problem tells that many users have this in JDK 6 solved with msvcr71.dll, but not for me <img class="emoji" alt="
相关文章推荐
- 在64位操作系统上使用FlashDevelop的Debug功能
- 64位操作系统使用debug单步调试汇编.exe文件
- 使用VMware 的P2V功能 将一台物理计算机操作系统克隆为一个虚拟机
- 64位win7使用debug的方法
- 64位操作系统使用PLSQL
- 如何判别电脑使用的Win7或xp版本是32位还是64位的操作系统呢?
- 64位win7,win8 使用debug的方法
- 64位操作系统下使用YUM下只安装纯净64位软件包的设定
- 64位操作系统中使用PLSQL Developer
- 64位操作系统下使用YUM只安装纯净64位软件包(RHEL 5.4 /CentOS 5.4)
- 64位系统 使用 flash player debug 调试
- 05 PB 在64位操作系统下,如何让PDF另存功能好用
- 在64位windows 7操作系统下,使用PL/SQL developer
- 64位操作系统使用7.0版winiis系统,报ActiveX 部件不能创建对象问题!
- ArcEngine开发——在64位操作系统下使用VS2010中开发ArcEngine应用程序的编译问题
- 64位win7使用debug的方法
- 32位和64位CPU、操作系统的区别 + 判断、使用建议
- ArcEngine开发——在64位操作系统下使用VS2010中开发ArcEngine应用程序的编译问题
- 使用Eclipse的debug调试功能 --写给刚走出校门的童鞋
- 64位win7使用debug的方法