`StackOverflowError` with Revise.jl

Hi everyone, I started to use Revise some weeks ago, really awesome to get a faster dev cycle (without julia restarts and re-precompiles all the time)! The problem now is that I always get this warning when working on my module:

┌ Warning: Failed to revise /path/to/some/file.jl: StackOverflowError()

Any ideas why this happens?
Is there a way to find out what exactly is going wrong? The warning message is not very helpful…

Thanks; I tried to follow the Logging by default instructions, so I put this in my startup.jl:

atreplinit() do repl
    try
        @eval using Revise
        @async Revise.wait_steal_repl_backend()

        # Turn on logging
        @eval Revise.debug_logger()
    catch
        @warn "Error activating Revise.jl."
    end
end

The warning is not shown, so everything seems to work fine. Is this the correct way to enable logging everything?

When I trigger a revision on my module by modifying a file, I get the StackOverflowError-warning but the logs field of the log obtained by Revise.debug_logger() is empty…

I’ve not seen that before. Is that really the only info it prints? is generally an indication that more follows. (It’s a “vertical bracket opener.”)

If you can’t figure it out on your own, please file a Revise issue with a minimal working example demonstrating the error.

1 Like

Sorry, didn’t copy the entire message (and I’m actually on Windows right now):

┌ Warning: Failed to revise C:\path\to\some\file.jl: StackOverflowError()
└ @ Revise C:\path\to\.julia\packages\Revise\RW8TD\src\Revise.jl:546

It’s funny, it worked for 2-3 times during the last 1-2 hours, now the error is here again…
Coming up with a MWE will be very hard since it probably has something to do with the structure and/or contents of my modules…?

Then your best bet is to dev Revise and modify it something like this:

$ git diff src/Revise.jl
diff --git a/src/Revise.jl b/src/Revise.jl
index 49f670b..af69404 100644
--- a/src/Revise.jl
+++ b/src/Revise.jl
@@ -526,7 +526,7 @@ function revise()
             push!(mexsnews, handle_deletions(pkgdata, file)[1])
             push!(finished, (pkgdata, file))
         catch err
-            push!(revision_errors, (basedir(pkgdata), file, err))
+            push!(revision_errors, (basedir(pkgdata), file, err, stacktrace(catch_backtrace())))
         end
     end
     # Do the evaluation
@@ -537,13 +537,14 @@ function revise()
             eval_new!(mexsnew, fi.modexsigs)
             pkgdata.fileinfos[i] = FileInfo(mexsnew, fi)
         catch err
-            push!(revision_errors, (basedir(pkgdata), file, err))
+            push!(revision_errors, (basedir(pkgdata), file, err, stacktrace(catch_backtrace())))
         end
     end
     empty!(revision_queue)
-    for (basedir, file, err) in revision_errors
+    for (basedir, file, err, st) in revision_errors
         fullpath = joinpath(basedir, file)
         @warn "Failed to revise $fullpath: $err"
+        display(st)
     end
     tracking_Main_includes[] && queue_includes(Main)
     nothing

Then you’ll get the stacktrace that caused the error.

1 Like