You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IEx中先设断点运行本地安装的Mix任务?为何返回:noop?

问题解答:在IEx中调试本地安装的Mix任务

为什么Mix.Task.run返回:noop?

Mix的任务运行机制自带幂等性保护:同一个IEx会话内,任何任务通过Mix.Task.run/2只能执行一次,后续重复调用都会返回:noop。这不是本地安装归档任务的特例——比如你用iex -S mix deps启动后,再调用Mix.Task.run("deps", [])也会得到同样的结果。

你用iex -S mix locally.installed.task启动会话时,目标任务已经在IEx初始化阶段执行完毕,所以后续调用Mix.Task.run触发了幂等性保护,返回:noop。

如何在IEx中先设断点再运行任务?

有两种可靠的解决方式:

方式1:启动时不预先执行任务

直接用iex -S mix进入IEx会话,此时目标任务还未执行:

# 设置断点
break! Mix.Tasks.Locally.Installed.Task.run/1
# 首次执行任务,断点会触发
Mix.Task.run("locally.installed.task", args)

方式2:绕过幂等性检查重新执行任务

如果已经通过iex -S mix [task]预先执行过任务,使用Mix.Task.rerun/2代替Mix.Task.run/2,它会强制重新运行任务:

# 设置断点
break! Mix.Tasks.Locally.Installed.Task.run/1
# 强制重新执行任务,断点会触发
Mix.Task.rerun("locally.installed.task", args)

内容的提问来源于stack exchange,提问作者Michael Johnston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:00:15