@@ -47,26 +47,15 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do
4747 Dbg . tracer ( :process , { & handle_trace / 2 , 0 } )
4848 Dbg . p ( :all , [ :c , :timestamp ] )
4949
50- all_modules = ModuleDiscoveryService . all_modules ( )
51-
52- callbacks =
53- all_modules
54- |> ModuleDiscoveryService . live_view_modules ( )
55- |> CallbackUtils . live_view_callbacks ( )
56-
57- all_modules
58- |> ModuleDiscoveryService . live_component_modules ( )
59- |> CallbackUtils . live_component_callbacks ( )
60- |> Enum . concat ( callbacks )
61- |> Enum . each ( fn mfa ->
62- Dbg . tp ( mfa , [ { :_ , [ ] , [ { :return_trace } ] } ] )
63- Dbg . tp ( mfa , [ { :_ , [ ] , [ { :exception_trace } ] } ] )
64- end )
50+ add_live_modules_to_tracer ( )
6551
6652 # This is not a callback created by user
6753 # We trace it to refresh the components tree
6854 Dbg . tp ( { Phoenix.LiveView.Diff , :delete_component , 2 } , [ ] )
6955
56+ # We need to get information when code reloads to properly trace modules
57+ Dbg . tp ( { Mix.Tasks.Compile.Elixir , :run , 1 } , [ { :_ , [ ] , [ { :return_trace } ] } ] )
58+
7059 { :noreply , state }
7160 end
7261
@@ -79,6 +68,16 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do
7968 # Because of that we do it asynchronously to speed up tracer a bit
8069 # We do not persist this trace because it is not displayed to user
8170 @ spec handle_trace ( term ( ) , n :: integer ( ) ) :: integer ( )
71+ defp handle_trace ( { _ , _ , :return_from , { Mix.Tasks.Compile.Elixir , _ , _ } , _ , _ } , n ) do
72+ Process . sleep ( 100 )
73+ add_live_modules_to_tracer ( )
74+ n
75+ end
76+
77+ defp handle_trace ( { _ , _ , _ , { Mix.Tasks.Compile.Elixir , _ , _ } , _ } , n ) do
78+ n
79+ end
80+
8281 defp handle_trace (
8382 { _ , pid , _ , { Phoenix.LiveView.Diff , :delete_component , [ cid | _ ] = args } , timestamp } ,
8483 n
@@ -144,6 +143,24 @@ defmodule LiveDebugger.GenServers.CallbackTracingServer do
144143 n
145144 end
146145
146+ defp add_live_modules_to_tracer ( ) do
147+ all_modules = ModuleDiscoveryService . all_modules ( )
148+
149+ callbacks =
150+ all_modules
151+ |> ModuleDiscoveryService . live_view_modules ( )
152+ |> CallbackUtils . live_view_callbacks ( )
153+
154+ all_modules
155+ |> ModuleDiscoveryService . live_component_modules ( )
156+ |> CallbackUtils . live_component_callbacks ( )
157+ |> Enum . concat ( callbacks )
158+ |> Enum . each ( fn mfa ->
159+ Dbg . tp ( mfa , [ { :_ , [ ] , [ { :return_trace } ] } ] )
160+ Dbg . tp ( mfa , [ { :_ , [ ] , [ { :exception_trace } ] } ] )
161+ end )
162+ end
163+
147164 @ spec persist_trace ( Trace . t ( ) ) :: :ok | { :error , term ( ) }
148165 defp persist_trace ( % Trace { } = trace ) do
149166 TraceService . insert ( trace )
0 commit comments