matlab - 如何从 MATLAB applicationCompiler 命令中捕获错误

标签 matlab matlab-deployment matlab-compiler

我正在使用命令 applicationCompiler -package harmonic_viewer.prj 来编译 MATLAB 程序以供分发。有时我错过了一个文件,应用程序编译器会抛出错误。我想捕获此类错误并将错误向上传递以终止编译多个程序的 Windows 批处理脚本。

从文档看来,applicationCompiler 不会返回通过/失败结果。它确实抛出了一个在 MATLAB 命令窗口中以红色显示的错误。我相信我应该能够在 try-catch-end block 中捕获错误,但它对我不起作用。这是一个示例 session

>> try
applicationCompiler -package harmonic_viewer.prj
catch me
disp('ac error')
end
Error: Caught exception when packaging project: C:\build_matlab\source\harmonic_viewer\harmonic_viewer.prj
com.mathworks.project.api.InvalidProjectException
File filteredunwrap.m from Files required for your application to run does not exist.
>> 

我希望 try-catch-end block 捕获错误并打印“ac error”。

谁能看出我做错了什么?

我在 64 位 Windows 7 上使用 MATLAB r2014a。

最佳答案

编译在另一个线程上运行 - 您可以在编译进行时与 Matlab 交互,这一点您就知道了。

解决此问题的方法(有点 hack)是创建一个后期构建方法,该方法将读取命令窗口并查找关键字,即“Package failed”或“package finished”或在您的情况下“错误:被捕获”

例如

clc
applicationCompiler -package yourProject.prj
cmdWinDoc = com.mathworks.mde.cmdwin.CmdWinDocument.getInstance;
% loop until condition found
while true
  pause ( 2 )
  myTxt = cmdWinDoc.getText(cmdWinDoc.getStartPosition.getOffset,cmdWinDoc.getLength);
  %
  if ~isempty ( strfind ( myTxt, 'Package finished' ) )
    fprintf ( 'Woo hoo - it worked!!! :)\n' );
    break
  end
  if ~isempty ( strfind ( myTxt, 'Package failed' ) )
    fprintf ( 'Uh oh - it failed!!! :)\n' );
    break
  end
end

注意:您还应该在循环中进行时间限制检查,以捕获无限循环情况...

您当然可以扩展它以搜索您的案例的错误和关键字。

关于matlab - 如何从 MATLAB applicationCompiler 命令中捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746694/

相关文章:

video - Matlab:快速播放大视频

matlab - 在运行时为 Mac 和 Linux 获取已部署的 Matlab 应用程序的位置

matlab - 如何在 MATLAB 中将训练神经网络编译为独立应用程序?

matlab - MWArray 到 C# 数组,无需跳过任何步骤

algorithm - 使用互相关比较 2 个信号时, "good"R 值是多少?

matlab - MATLAB 中使用 Geoshow 绘制颜色图

matlab - 检测二维阵列中的 block 状区域

c# - 我们可以在 C# 中创建 GUI 来运行 MATLAB 代码吗?

java - 如何通过 MATLAB Builder JA 访问构建的 jar 文件中保存在 .mat 文件中的变量?

matlab - 确定文件是否在 matlab 中编译(在 exe' 中)