首页 文章

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

提问于
浏览
3

我使用命令 applicationCompiler -package harmonic_viewer.prj 编译MATLAB程序进行分发 . 有时我会错过一个文件,应用程序编译器会抛出错误 . 我想捕获这样的错误并传递错误以终止编译许多程序的Windows批处理脚本 .

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

>> 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块捕获错误并打印'ac error' .

谁能看到我做错了什么?

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

1 回答

  • 2

    编译是在另一个线程上运行的 - 你知道这是因为你可以在编译过程中与Matlab交互 .

    修复此问题的方法(它有点像黑客)是创建一个post build方法,它将读取命令窗口并查找关键字,即“Package failed”或“package finished”或在你的情况下“Error:Caught “

    例如

    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
    

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

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

相关问题