我正在使用命令 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/