Julia 的新 Debugger.jl 很棒,但有时要达到我想要达到的代码中的确切位置有点痛苦。
有没有办法可以进入交互式调试模式,类似于 Python 在 pdb.set_trace() 或 ipdb.set_trace() 中的模式?例如,我希望能够在我希望调试器启动的位置插入一行代码,如下所示:
function myfunc(a, b)
# do stuff
set_trace() # interactive debug mode will start here
# do other stuff
end
Run Code Online (Sandbox Code Playgroud)
ps我知道这基本上就像在Juno中设置断点一样,但是1)我不能总是在Juno中开发;2)即使经过一番努力,我也无法真正让断点与 Juno 的调试器很好地配合工作。这可能是我的用户错误,但我确信其他 Julia 新手也会遇到同样的问题,并且会喜欢 pdb.set_trace() 这样的解决方案。
您正在寻找的功能非常简洁:
@bp
Run Code Online (Sandbox Code Playgroud)
只需确保您已加载调试器包以便可以使用它:
using Debugger
Run Code Online (Sandbox Code Playgroud)
请注意,如果您通过普通方法运行最外层函数(例如 myfunc),它实际上不会在断点处停止。您需要使用@enter或在调试模式下运行它@run。这是一个完整的示例:
using Debugger
function myfunc(a, b)
c = a + b
@bp # interactive debug mode will start here
c += 1
end
@run myfunc(42, 5)
Run Code Online (Sandbox Code Playgroud)
(当您使用 CTRL+ENTER 运行该行时, Juno有时会产生奇怪的行为@run ...。最好将该特定行直接复制并粘贴到 REPL 中。)
@bp实际上是一个宏,是 JuliaInterpreter.jl 的一部分。该模块还有许多其他有用的调试功能 -有关更多详细信息,请参阅JuliaInterpreter 文档。