我可以在 GUI 初始化代码中加入 try-catch 吗?

Can I put a try-catch in GUI initialization code?

我正在 MATLAB (2016a) 中构建一个 GUI,我将对其进行编译和部署。我想尝试做一些全局错误处理,我发现任何给 GUI 的命令(按钮点击等)在进入特定的回调函数之前首先通过主初始化代码。我的想法是在对 gui_mainfcn 的调用周围放置一个 try-catch 块。让我犹豫的是代码被一些大的旧警告预订:

% Begin initialization code - DO NOT EDIT
... initialization code here ...
% End initialization code - DO NOT EDIT

我可以通过在这个初始化部分中放置一个 try-catch 块来破坏某些东西吗?是否有更好的方法尝试对单个 GUI 进行全局错误处理?

没有理由不能在 GUIDE GUI 的主要功能中插入全局错误处理。这些警告实际上是为了防止人们无意中破坏 GUI 功能。在您的情况下,try/catch 实际上不会 修改 功能,所以您没问题。您只是想确保不要删除对 gui_mainfcn 的调用,这是一个包含所有 GUI 逻辑的内部函数。

除此之外,您还需要确保填充所有请求的输出参数,以便在发生错误的情况下(对于需要输出参数的函数调用)没有错误(在您的 catch 块)被抛出 因为那个 。不过这应该很容易

此外,我只会将调用包装到 gui_mainfcn

try
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
catch ME
    % Go ahead and fill in the requested outputs with [] so we don't get an error
    [varargout{1:nargout}] = deal([]);

     % Do special error handling here
    fprintf('Caught error: %s\n', ME.message);
end