我正在使用命令applicationCompiler -package harmonic_viewer.prj
编译一个用于分发的MATLAB程序。有时我会错过一个文件,应用程序编译器会引发错误。我想捕获这样的错误并将错误传递给终止编译许多程序的Windows批处理脚本。如何从MATLAB applicationCompiler命令中捕获错误
从文档中看来,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块捕获错误并打印“交流错误”。
任何人都可以看到我做错了什么?
我使用64位Windows 7
你确认它确实是个例外吗?我没有找到'applicationCompiler'的任何文档(可能你需要一个许可证来查看它),但它可能会返回一个错误代码并且不会抛出异常。你可以运行'applicationcompiler -package harmonic_viewer.prj; disp('no error');'?你看到disp吗? – Daniel
对于r2015b,请参见[here](http://uk.mathworks.com/help/compiler_sdk/ml_code/deploytool.html)。 deployTool用于取决于您想要构建的三种版本,而applicationCompiler则是版本的风格,然后将编译程序打包到安装程序中。这确实是一个错误;我重命名了其中一个源文件。 applicationCompiler有点奇怪。它在后台运行,因此命令提示符会返回,但编译器会继续发送更多信息。当错误发生时,它会像正常的MATLAB错误那样提早提早并且控制返回到命令提示符。 –
如果它在后台运行,那么它必定是一些类似于[this](http://stackoverflow.com/a/31971240/2732801)的问题,您的try/catch不再是堆栈的一部分。在没有代码的情况下调试这些东西有点棘手,但是您可以尝试以下方法。将代码放在一个名为'foo'的函数中并运行代码。在'rethrow(lasterror)'中收到错误类型后,它返回什么?我的猜测是,'foo'不是堆栈的一部分。 'lasterror'也可能是获得例外的唯一方法,我在链接答案中提出的解决方法可能不适用于此。 – Daniel