如何在Python环境中调试通过juliacall调用的Julia函数?
如何在Python环境中调试通过juliacall调用的Julia函数?
我完全懂这种抓心的痛点——用juliacall在Python框架里跑Julia写的函数,VS Code的Python和Julia扩展各自的调试工具都挺好用,但就是没法在Julia函数里触发断点,两边调试完全脱节,太闹心了!
下面分享两个亲测有效的方法,都是在VS Code里就能搞定的:
方法一:远程调试联动(最贴合VS Code可视化调试)
这是我最常用的方式,能直接用VS Code的Julia调试面板控制断点:
- 第一步:先给Julia搭好调试监听
打开你写Julia函数的脚本,在VS Code左侧调试面板(那个虫子图标)里,点击「创建launch.json文件」,选择「Julia」→「Remote Debug (Listen)」配置。启动这个调试会话后,VS Code底部会显示Julia调试服务器正在监听的端口(默认是localhost:9999)。 - 第二步:让Python的juliacall连接到调试服务器
在你的Python代码最开头,先设置环境变量指定调试服务器地址,再导入juliacall:import os # 这里的端口要和Julia调试服务器的监听端口一致 os.environ["JULIA_DEBUG_SERVER"] = "localhost:9999" from juliacall import Main as jl - 第三步:启动调试
在Julia函数里设好你需要的断点,然后启动VS Code的Python调试会话(选普通的Python: Current File配置就行)。当Python代码调用到Julia函数时,就会自动触发Julia那边的断点,你可以在VS Code里查看Julia变量、单步执行、跳过代码,和调试纯Julia代码完全一样!
方法二:用Julia Debugger包临时调试
如果只是临时排查问题,不想搭远程服务器,这个方法更快捷:
- 先在Julia环境里装Debugger包:打开Julia REPL,输入
using Pkg; Pkg.add("Debugger") - 在你的Python代码里,先让Julia加载Debugger,然后用
@enter宏包裹要调用的Julia函数:
执行到这行时,VS Code的终端会切换到Julia的调试REPL,你可以用调试命令操作:from juliacall import Main as jl # 让Julia加载Debugger包 jl.eval("using Debugger") # 调用Julia函数时用@enter触发调试 # 把my_julia_function和args换成你自己的函数和参数 result = jl.eval("@enter my_julia_function(123, \"test\")")n单步执行,s进入子函数,c继续执行到下一个断点,q退出调试。
几个要注意的小细节
- 确保Julia和Python进程用的是同一个用户权限,不然可能连不上调试服务器。
- 如果用了Python虚拟环境,要确认juliacall调用的Julia环境是你装了Debugger包的那个(可以用
jl.eval("Pkg.status()")检查)。 - 要是调试没触发,试试重启VS Code的Julia和Python扩展,有时候扩展缓存会搞事情。
内容来源于stack exchange




