记录一次BUG调试的过程

起因:

程序主体是Java,其中高斯函数的拟合计算部分使用了Matlab程序打包的jar,操作时将程序移植到另一台电脑上并出现了很多问题。

现总结如下:

问题1:Failed to find the required library mclmcrrt9_6.dll on java.library.path。

解决方法:

1)保证jdk版本与matlab的java版本一致

        a.jdk版本既不能高,也不能低,到最新的matlabR2022b为止,其Java版本还是1.8,可以从网站上下载1.8版本的jdk,1.8后面的数字差异可以不用考虑 ;

        b.按照初学Java时配置环境变量的步骤,将jdk1.8作为操作系统中的Java版本

        c.也可以根据IDE操作,比如在创建项目时,将本项目的library特别设定为jdk1.8版本;

2) 确保安装mcr运行环境,即mcrinstaller

        具体而言,步骤如下:

        a.安装Matlab,并在命令行输入mcrinstaller,系统通常会显示缺少必要的工具,如matlab compiler和matlab compiler sdk,下载matlab compiler即可。

        b.再次在命令行中输入mcrinstaller,这时会显示matlab安装路径下没有mcrinstaller,同时会给出compiler.runtime.download,输入命令后即可开始下载,需要等待一些时间。

        这里需要注意的是,runtime版本与matlab版本是对应的,采用高版本的runtime是无法编译成功的

        c.解压下载完成的压缩包,并将其配置到环境变量中,如下图为本机runtime压缩包解压后的状态,将目录上的路径配置到环境变量即可。

如此,问题1基本上就可以解决了。

问题2:错误使用 message/getString....

解决方法:

这个问题在检索时并未找到,通常这种问题都不是Eclipse程序存在的问题,除非上述问题1中的环境没有配置好,因此通常代表的是Matlab程序存在的问题。

出现这个报错信息的原因是,Matlab程序导入的文件不存在,只需要将文件放入路径即可。

 问题3:'optimlib:commonMsgs'与‘optimlib:snls’......

解决方法:

出现这类报错问题时,通常会有大篇幅的红色信息,其实根据这些简短的内容也可以有所判断。

通常Eclipse调试过程中,是不会出现optimlib的报错信息的,因此基本上可以锁定问题出现在Matlab源程序上。

本人在调试过程中,深陷于思维定式,将重点放在了Eclipse调用Matlab程序的方法上,认为程序报错和Matlab源代码无关,而与Eclipse如何调用Matlab程序有关,

因此最佳的解决方法就是,找到Matlab的源码并重新进行调试。

在调试过程中,Matlab环境编译报错给出的问题是,缺少了optimal toolbox,这也与上面的optimlib的报错对应起来了。

总结一下:

调试这个程序花费了本人几个小时的时间,不过这几个小时是有价值的。

具体表现在,首先,runtime的版本需要和Matlab对应,而不是考虑向下兼容。

其次,考虑混合编程问题时,先排除源码可能存在的问题,接着在考虑调用的问题,最后考虑编译环境本身的问题。

这样的顺序其实是有逻辑在其中的,

通常应用混合编程时,主体程序是我们非常熟悉的,例如Java、C或者C++等,而混合编程部分通常是我们不那么熟悉的语言,如python、Matlab等,

(1)先考虑源码的问题,也就从相对的难易程度上排除了报错的可能,因为我们的的错误很可能出现在源码的编写上,这也容易成为我们的盲区而浪费后续的大量时间。

(2)再考虑混合编程的调用问题,这一点看似比(1)要复杂,但(1)是真正排查编程盲区时需要注意的内容;如果(1)可以顺利解决,那么就更有精力攻克(2)的问题。

本人先后尝试过将Java和Matlab以及Python混合编程的经历,其中与python混合编程要相当容易,通过在maven中引入依赖可以解决问题,而Matlab则涉及到了jdk版本还有打包的问题,因此更为复杂,操作步骤中也要非常上心。

(3)最后考虑主体程序存在的问题,通常主体的代码我们更为熟悉,因此调试起来也会更加轻松。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值