在Matlab

时间:2017-05-21 11:39:34

标签: matlab debugging logging

我想设置一个标志,用于确定debug-print语句是否实际打印到控制台:

s_verbose       = 1;

global DBG
if s_verbose
    DBG = @(varargin) fprintf(varargin);
else
    DBG = @(varargin) 1;  % need the 1  :|
end

然而这失败了:

>> DBG('42')
Error using fprintf
Invalid file identifier.
Use fopen to generate a valid file identifier.

>> fprintf('42')
42

有没有干净的方法来实现这个目标?

1 个答案:

答案 0 :(得分:1)

我经常使用这样的实用函数:

function vfprintf(verbose, varargin)
% VFPRINTF Display output optionally depending on the level of verbosity.
%
% VFPRINTF(TF, ARGS) passes the arguments ARGS to the built-in MATLAB
% command |fprintf| if TF is logical true. If TF is logical false, VFPRINTF
% does nothing.

assert(islogical(verbose) && isscalar(verbose),...
    'utils:InvalidVerbose',...
    'VERBOSE must be logical true or false');

if verbose
    fprintf(varargin{:});
end

然后,您可以拨打vfprintf而不是fprintf。将您的verbose变量作为第一个参数,值为truefalse,然后使用您通常提供给fprintf的任何参数。如果verbosetrue,则会显示,但如果verbosefalse,则不会执行任何操作。

PS - 即使你这样做,我会尽量避免让verbose成为全局变量。没有必要。