From f9b6112fa1ed12965371969c0c436141859f15b5 Mon Sep 17 00:00:00 2001 From: Alan Guzek Date: Wed, 21 May 2025 15:52:15 +0200 Subject: [PATCH 1/3] hide behind config option --- .../gen_servers/callback_tracing_server.ex | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/live_debugger/gen_servers/callback_tracing_server.ex b/lib/live_debugger/gen_servers/callback_tracing_server.ex index 3e853f663..a3d4d4083 100644 --- a/lib/live_debugger/gen_servers/callback_tracing_server.ex +++ b/lib/live_debugger/gen_servers/callback_tracing_server.ex @@ -53,8 +53,10 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do # We trace it to refresh the components tree Dbg.tp({Phoenix.LiveView.Diff, :delete_component, 2}, []) - # We need to get information when code reloads to properly trace modules - Dbg.tp({Mix.Tasks.Compile.Elixir, :run, 1}, [{:_, [], [{:return_trace}]}]) + if Application.get_env(:live_debugger, :tracing_reset_on_code_reload?, false) do + # We need to get information when code reloads to properly trace modules + Dbg.tp({Mix.Tasks.Compile.Elixir, :run, 1}, [{:_, [], [{:return_trace}]}]) + end {:noreply, state} end @@ -64,11 +66,8 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do {:reply, :ok, state} end - # This handler is heavy because of fetching state and we do not care for order because it is not displayed to user - # Because of that we do it asynchronously to speed up tracer a bit - # We do not persist this trace because it is not displayed to user @spec handle_trace(term(), n :: integer()) :: integer() - defp handle_trace({_, _, :return_from, {Mix.Tasks.Compile.Elixir, _, _}, _, _}, n) do + defp handle_trace({_, _, :return_from, {Mix.Tasks.Compile.Elixir, _, _}, {:ok, _}, _}, n) do Process.sleep(100) add_live_modules_to_tracer() n @@ -78,6 +77,13 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do n end + defp handle_trace({_, _, _, {Mix.Tasks.Compile.Elixir, _, _}, _, _}, n) do + n + end + + # This handler is heavy because of fetching state and we do not care for order because it is not displayed to user + # Because of that we do it asynchronously to speed up tracer a bit + # We do not persist this trace because it is not displayed to user defp handle_trace( {_, pid, _, {Phoenix.LiveView.Diff, :delete_component, [cid | _] = args}, timestamp}, n From 252c7202db6beb617dffeb817b5d9fe1b4e61a3c Mon Sep 17 00:00:00 2001 From: Alan Guzek Date: Wed, 21 May 2025 15:58:21 +0200 Subject: [PATCH 2/3] change name, update docs --- README.md | 4 ++++ docs/config.md | 4 ++++ lib/live_debugger/gen_servers/callback_tracing_server.ex | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cadc3950..3a97f5832 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,10 @@ config :live_debugger, :disabled?, true # Time in ms after tracing will be initialized. Useful in case multi-nodes envs config :live_debugger, :tracing_setup_delay, 0 +# Used when working with code reloading and traces are not visible. +# WARNING! This may cause some performance issues. +config :live_debugger, :tracing_update_on_code_reload?, true + # LiveDebugger endpoint config config :live_debugger, ip: {127, 0, 0, 1}, # IP on which LiveDebugger will be hosted diff --git a/docs/config.md b/docs/config.md index c1e88afe3..d96a69e44 100644 --- a/docs/config.md +++ b/docs/config.md @@ -38,6 +38,10 @@ config :live_debugger, :disabled?, true # Time in ms after tracing will be initialized. Useful in case multi-nodes envs config :live_debugger, :tracing_setup_delay, 0 +# Used when working with code reloading and traces are not visible. +# WARNING! This may cause some performance issues. +config :live_debugger, :tracing_update_on_code_reload?, true + # LiveDebugger endpoint config config :live_debugger, ip: {127, 0, 0, 1}, # IP on which LiveDebugger will be hosted diff --git a/lib/live_debugger/gen_servers/callback_tracing_server.ex b/lib/live_debugger/gen_servers/callback_tracing_server.ex index a3d4d4083..eb4674a42 100644 --- a/lib/live_debugger/gen_servers/callback_tracing_server.ex +++ b/lib/live_debugger/gen_servers/callback_tracing_server.ex @@ -53,7 +53,7 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do # We trace it to refresh the components tree Dbg.tp({Phoenix.LiveView.Diff, :delete_component, 2}, []) - if Application.get_env(:live_debugger, :tracing_reset_on_code_reload?, false) do + if Application.get_env(:live_debugger, :tracing_update_on_code_reload?, false) do # We need to get information when code reloads to properly trace modules Dbg.tp({Mix.Tasks.Compile.Elixir, :run, 1}, [{:_, [], [{:return_trace}]}]) end From 8e302c185ef0757d2f216d3d22da3d7cc1f16916 Mon Sep 17 00:00:00 2001 From: Alan Guzek Date: Wed, 21 May 2025 16:05:21 +0200 Subject: [PATCH 3/3] fix tests --- test/gen_servers/callback_tracing_server_test.exs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/test/gen_servers/callback_tracing_server_test.exs b/test/gen_servers/callback_tracing_server_test.exs index 79f436a94..ff3f9092d 100644 --- a/test/gen_servers/callback_tracing_server_test.exs +++ b/test/gen_servers/callback_tracing_server_test.exs @@ -50,9 +50,6 @@ defmodule LiveDebugger.GenServers.CallbackTracingServerTest do MockDbg |> expect(:tp, fn {Phoenix.LiveView.Diff, :delete_component, 2}, [] -> :ok end) - |> expect(:tp, fn {Mix.Tasks.Compile.Elixir, :run, 1}, [{:_, [], [{:return_trace}]}] -> - :ok - end) assert {:noreply, %{}} = CallbackTracingServer.handle_info(:setup_tracing, %{}) end @@ -65,9 +62,6 @@ defmodule LiveDebugger.GenServers.CallbackTracingServerTest do MockDbg |> expect(:p, fn :all, [:c, :timestamp] -> :ok end) |> expect(:tp, fn {Phoenix.LiveView.Diff, :delete_component, 2}, [] -> :ok end) - |> expect(:tp, fn {Mix.Tasks.Compile.Elixir, :run, 1}, [{:_, [], [{:return_trace}]}] -> - :ok - end) # In order to keep CallbackTracingServer.handle_trace function private we extract it here # and send to test process so that we can test it