erlang调用栈

vin*_*itu 9 erlang stack call

我需要在外部系统中调试一些模块,模块有公共函数foo() - 我怎么知道调用foo()给定模块的地方(模块和函数名)?我的意思是一堆电话.

PS:我无法停止系统,我可以通过重新加载此模块来完成所有工作(但使用som调试信息)

-module(given).
-export(foo/0).

foo() ->
   %% here is my debug - and i need here(!) known about unknown_module:unknown_foo!
   ok.

---
-module(unknown_module).
..

unknown_foo() ->
   given:foo().  %% see above
Run Code Online (Sandbox Code Playgroud)

Ric*_*rdC 19

这是一个简单的伎俩:

Trace = try throw(42) catch 42 -> erlang:get_stacktrace() end,
erlang:display(Trace)
Run Code Online (Sandbox Code Playgroud)

  • 较新的变体是“try throw(42) catch _:_:Stk -> Stk end” (3认同)