使用 Julia 的 Debugger.jl - 如何进入类似于 Python 的 pdb.set_trace() 或 ipdb.set_trace() 的调试模式?

J. *_*elt 5 debugging julia

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() 这样的解决方案。

J. *_*elt 5

您正在寻找的功能非常简洁:

@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 文档。