Skip to content

Instantly share code, notes, and snippets.

@garthk
Created October 1, 2020 04:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save garthk/a1e08173226d62b25dcf879b6866bc75 to your computer and use it in GitHub Desktop.
Save garthk/a1e08173226d62b25dcf879b6866bc75 to your computer and use it in GitHub Desktop.
Watch Elasticsearch.post/3 et al
:dbg.stop_clear()
{:ok, _} =
:dbg.tracer(
:process,
{fn
{:trace, pid, :call, {mod, fun, args} = call}, stacks ->
mfa = Exception.format_mfa(mod, fun, Enum.count(args)) |> Pretty.inspect(label: ":call")
Smuggle.dump({mod, fun, args}, wrapper: :gfm)
stack = Map.get(stacks, pid, [])
Map.put(stacks, pid, [mfa | stack])
{:trace, pid, :exception_from, {mod, fun, arity}, {class, value}}, stacks ->
mfa = Exception.format_mfa(mod, fun, arity)
case Map.get(stacks, pid) do
[^mfa | tail] ->
Pretty.inspect({class, value}, label: "#{mfa} crashed")
Map.put(stacks, pid, tail)
stack ->
IO.warn("bad exception_from " <> inspect(%{mfa: mfa, stack: stack}))
stacks
end
{:trace, pid, :return_from, {mod, fun, arity}, retval}, stacks ->
mfa = Exception.format_mfa(mod, fun, arity)
case Map.get(stacks, pid) do
[^mfa | tail] ->
Pretty.inspect(retval, label: "#{mfa} returned")
Smuggle.dump(retval, wrapper: :gfm)
Map.put(stacks, pid, tail)
stack ->
IO.warn("bad return_from " <> inspect(%{mfa: mfa, stack: stack}))
stacks
end
end, %{}}
)
:dbg.p(:all, [:call])
:dbg.p(:all, [:call, :return_to])
:dbg.tp(Elixir.Elasticsearch, :post, [{:_, [], [{:return_trace}, {:exception_trace}]}])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment