Fix unnecessary recompilation when dbg_callback is modified at runtime #15007
+45
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
Tools like Kino modify
dbg_callbackat runtime to customizedbg/2behavior. Previously, this runtime modification would trigger unnecessary recompilation on server start, even though the config hadn't actually changed.This is problematic for Phoenix projects with
code_reloader: true.Solution
Store the initial
dbg_callbackvalue ininitial_dbg_callbackwhen the:elixirapp starts. Mix compiler now compares againstinitial_dbg_callbackinstead ofdbg_callback.The key insight is that
dbg/2is a compile-time macro, so runtime modifications todbg_callbackdon't affect already-compiled code. Only actual config changes (reflected ininitial_dbg_callback) should trigger recompilation.Changes
lib/elixir/src/elixir.erl: Storeinitial_dbg_callbackon app startlib/mix/lib/mix/compilers/elixir.ex: Compare againstinitial_dbg_callbackI'm currently using Elixir 1.19.4 with Kino in a Phoenix project and experiencing this issue. A backport to v1.19 would be appreciated.