前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elixir 依赖 (deps) 调试的小技巧

Elixir 依赖 (deps) 调试的小技巧

作者头像
Cloud-Cloudys
发布2023-10-21 10:16:22
1460
发布2023-10-21 10:16:22
举报

许久未更博客,“微有所感”,小更一篇。

最近使用 Elixir 有点多, 经常需要观察一些依赖 (Deps) 的实现, 比如想加个日志打印点 IO.inspect 啥的观察下某个变量,才能更好的理解某个 Elixir 的依赖。这里介绍下一些调试的方式:

这里以 yeshan333/ex_integration_coveralls 为例子.

我们先 clone 项目到本地:

代码语言:javascript
复制
git clone [email?protected]:yeshan333/ex_integration_coveralls.git
cd ex_integration_coveralls
# 拉一下依赖
mix deps.get

比如, 我们想看一下代码扫描的依赖 credo 这个扫描规则 Credo.Check.Design.TagTODO 的实现大概是怎么样的.

1、mix deps.compile

找到它的实现 deps/credo/lib/credo/check/design/tag_todo.ex, 我们想要观察下变量 issue_meta 实际是怎么样的, IO.inspect 一下.

代码语言:javascript
复制
@doc false
@impl true
def run(%SourceFile{} = source_file, params) do
  issue_meta = IssueMeta.for(source_file, params)
  include_doc? = Params.get(params, :include_doc, __MODULE__)

  IO.inspect(issue_meta, label: "观察下 issue_meta 放的什么")

  source_file
  |> TagHelper.tags(@tag_name, include_doc?)
  |> Enum.map(&issue_for(issue_meta, &1))
end
加入观察点
加入观察点

好了,接下来我们重编译一下 credo 模块即可:

代码语言:javascript
复制
? mix deps.compile credo # 重编译下 credo
==> credo
Compiling 1 file (.ex)

调用下 credo 即可观察到我们埋下的变量打印点信息:

代码语言:javascript
复制
mix credo
埋点效果
埋点效果

这样每次添加依赖观察点之后, 我们只需要 recompile 下依赖即可.

代码语言:javascript
复制
# 如果想废弃掉我们对依赖的修改,只需要重新拉去依赖即可
mix deps.clean credo
mix deps.get

2、mix.exs 使用 :path 引用依赖

上面的方法经常需要手动重新编译指定的依赖, 这里还有个方式可以在我们使用任意 Mix Tasks 的时候,依赖都会自动重新编译, 我们只需要编译 mix.exs 将依赖指定为本地即可, 我们使用 path 指定依赖来源:

代码语言:javascript
复制
{:credo, "~> 1.6", only: [:dev, :test], runtime: false, path: "deps/credo"},
依赖来源为本地
依赖来源为本地
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-8-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、mix deps.compile
  • 2、mix.exs 使用 :path 引用依赖
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com