【发布时间】:2011-09-15 18:46:31
【问题描述】:
我正在处理的项目有很多内置的遥测和调试机制,这些机制必须在发布时可用,但系统的大多数部分不得使用。我想构建一个宏,在此类方法的顶部调用,如果没有从非常有限的一组模块中调用该方法,则会引发异常。
例如,我有一个调试模块,可用于从控制台操作系统状态,我有一个 Web 工具,允许管理员检查和更改系统。一些为它们的使用而设计的方法(但在整个系统的模块中实现)对于偶尔使用是很好的,但如果有人错误地将它们作为正常操作的一部分来调用它们,那将是严重的。
编辑:我已经尝试了下面的列表:keysearch 建议,它适用于我可以明确命名的任何模块,这可能是我将要管理的最好的模块。我有 web_foo、web_bar、web_foo_other、web_yippie_ki_yea_mf 等模块来匹配我依赖正则表达式的模块。
我可以执行以下操作。 (我没有编译这个。我希望你给出的任何答案都会阻止我将它投入生产。=])
try
%gotta do this to get the stacktrace:
throw(a)
catch
_ ->
Stack = erlang:get_stacktrace(),
{_, RegExp} = re:compile("webmanager", [multiline]),
case Match = re:run(Stack, RegExp) of
nomatch ->
throw(im_sorry_dave__im_afraid_i_cant_do_that);
{match, _} ->
ok
end
end
【问题讨论】:
-
从我的小Erlang经验来看,它看起来不像erlang。我认为最好不要使用try-catch。