@@ -7,6 +7,7 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do
77
88 require Logger
99
10+ alias LiveDebugger.GenServers.SettingsServer
1011 alias LiveDebugger.Services.System.DbgService , as: Dbg
1112 alias LiveDebugger.Services.ModuleDiscoveryService
1213 alias LiveDebugger.Services.ChannelService
@@ -49,6 +50,10 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do
4950 Dbg . tp ( mfa , [ { :_ , [ ] , [ { :exception_trace } ] } ] )
5051 end )
5152
53+ if SettingsServer . get ( :tracing_update_on_code_reload ) do
54+ add_code_reload_tracing ( )
55+ end
56+
5257 :ok
5358 end
5459
@@ -67,6 +72,11 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do
6772 { :ok , % { } }
6873 end
6974
75+ @ impl true
76+ def handle_call ( :ping , _from , state ) do
77+ { :reply , :ok , state }
78+ end
79+
7080 @ impl true
7181 def handle_info ( :setup_tracing , state ) do
7282 Dbg . tracer ( :process , { & handle_trace / 2 , 0 } )
@@ -78,19 +88,25 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do
7888 # We trace it to refresh the components tree
7989 Dbg . tp ( { Phoenix.LiveView.Diff , :delete_component , 2 } , [ ] )
8090
81- if Application . get_env ( :live_debugger , :tracing_update_on_code_reload? , false ) do
82- # We need to get information when code reloads to properly trace modules
83- Dbg . tp ( { Mix.Tasks.Compile.Elixir , :run , 1 } , [ { :_ , [ ] , [ { :return_trace } ] } ] )
84- end
91+ PubSubUtils . setting_changed ( )
92+ |> PubSubUtils . subscribe! ( )
8593
8694 { :noreply , state }
8795 end
8896
89- @ impl true
90- def handle_call ( :ping , _from , state ) do
91- { :reply , :ok , state }
97+ def handle_info ( { :setting_changed , :tracing_update_on_code_reload , reload? } , state )
98+ when is_boolean ( reload? ) do
99+ if reload? do
100+ add_code_reload_tracing ( )
101+ else
102+ remove_code_reload_tracing ( )
103+ end
104+
105+ { :noreply , state }
92106 end
93107
108+ def handle_info ( _ , state ) , do: { :noreply , state }
109+
94110 @ spec handle_trace ( term ( ) , n :: integer ( ) ) :: integer ( )
95111 defp handle_trace ( { _ , _ , :return_from , { Mix.Tasks.Compile.Elixir , _ , _ } , { :ok , _ } , _ } , n ) do
96112 Process . sleep ( 100 )
@@ -245,4 +261,12 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do
245261 |> PubSubUtils . trace_topic_per_pid ( fun , :return )
246262 |> PubSubUtils . broadcast ( { :updated_trace , trace } )
247263 end
264+
265+ defp add_code_reload_tracing ( ) do
266+ Dbg . tp ( { Mix.Tasks.Compile.Elixir , :run , 1 } , [ { :_ , [ ] , [ { :return_trace } ] } ] )
267+ end
268+
269+ defp remove_code_reload_tracing ( ) do
270+ Dbg . ctp ( { Mix.Tasks.Compile.Elixir , :run , 1 } , [ { :_ , [ ] , [ { :return_trace } ] } ] )
271+ end
248272end
0 commit comments