如何在 Elixir 中列出函数的调用者?

How to list callers of a function in Elixir?

我正在重构一个函数,我想知道调用它的每个文件。使用别名和导入,一个简单的 grep 将列出不同模块中具有相同名称的其他函数,或者会错过一些调用。

我尝试使用 mix xref 但它不适用于函数,只能用于模块(我使用的是 Elixir 1.12.1)。

$ mix xref callers MySchema.changeset/2
** (Mix) xref callers MODULE expects a MODULE, got: MySchema.changeset/2

是否有工具或外部参照命令来列出 Elixir 中函数的调用者?

有一个已弃用的 Mix.Tasks.Xref.calls/1 function, but it has been deprecated for a reason, Compilation tracers 更强大。

您可以为 {:remote_function, _, YourModule, :your_fun, your_arity} 设置跟踪器,然后从那里简单地 IO.puts/2