Elixir学习笔记——调试

在 Elixir 中,有多种调试代码的方法。在本章中,我们将介绍一些较常见的方法。

IO.inspect/2

O.inspect(item, opts \\ []) 在调试中真正有用的原因是它返回传递给它的 item 参数而不影响原始代码的行为。让我们看一个例子。

打印:

如您所见,IO.inspect/2 几乎可以“监视”代码中任何地方的值而不改变结果,这使得它在管道内部非常有用,就像上面的情况一样。

IO.inspect/2 还提供了使用标签选项修饰输出的功能。标签将在检查的项目之前打印:

打印:

将 IO.inspect/2 与 binding/0 一起使用也很常见,它会返回所有变量名称及其值:

当使用 :foo, "bar", :baz 调用 some_fun/3 时,它会打印:

分别查看 IO.inspect/2 和 Inspect.Opts 以了解有关该函数的更多信息并阅读有关所有支持的选项的信息。

dbg/2

Elixir v1.14 引入了 dbg/2。dbg 与 IO.inspect/2 类似,但专门针对调试而定制。它打印传递给它的值并返回它(就像 IO.inspect/2 一样),但它还会打印代码和位置。

上面的代码打印以下内容:

在讨论 IO.inspect/2 时,我们提到了将其放置在 |> 管道步骤之间时很有用。dbg 做得更好:它理解 Elixir 代码,因此它会在管道的每个步骤打印值。

此代码打印以下内容:

虽然 dbg 为 Elixir 构造提供了便利,但如果您想在调试时执行代码并设置断点,则需要 IEx。

Pry

使用 IEx 时,您可以传递 --dbg pry 作为选项,以“停止”dbg 调用所在的代码执行:

或者在项目内部进行调试:

现在,对 dbg 的任何调用都会询问您是否要窥探现有代码。如果您接受,您将能够直接从 IEx 访问所有变量以及代码中的导入和别名。这称为“窥探”。在 pry 会话运行时,代码执行将停止,直到调用 continue(或 c)或 next(或 n)。请记住,您始终可以使用 iex -S mix TASK 在项目上下文中运行 iex。

断点

dbg 调用要求我们更改要调试的代码,并且步进功能有限。幸运的是,IEx 还提供了一个 IEx.break!/2 函数,它允许您在任何 Elixir 代码上设置和管理断点,而无需修改其源代码。

与 dbg 类似,一旦到达断点,代码执行就会停止,直到调用 continue(或 c)或 next(或 n)。默认情况下,断点可以逐行导航,但是,当在编译模块上设置断点时,它们无法访问别名和导入。

混合测试任务通过 -b/--breakpoints 标志直接与断点集成。使用该标志时,将在每个将要运行的测试开始时设置一个断点。

以下是一些您可以在实践中使用的命令:

Observer

对于调试复杂系统,直接跳到代码是不够的。必须了解整个虚拟机、进程、应用程序,以及设置跟踪机制。幸运的是,这可以在 Erlang 中使用 :observer 实现。在您的应用程序中:

缺少依赖项
当使用 iex -S mix 在项目内运行 iex 时,observer 将无法作为依赖项使用。为此,您需要先调用以下函数:

如果上述任何调用失败,则可能发生以下情况:某些包管理器默认安装最小化的 Erlang,不带 WX 绑定以提供 GUI 支持。在某些包管理器中,您可能能够用更完整的包替换无头 Erlang(在 Debian/Ubuntu/Arch 上查找名为 erlang vs erlang-nox 的包)。在其他管理器中,您可能需要安装单独的 erlang-wx(或类似名称)包。

以上将打开另一个图形用户界面,该界面提供许多窗格,以全面了解和导航运行时和您的项目。

我们在 Mix & OTP 指南的动态监控器章节中,结合实际项目对 Observer 进行了探讨。这是 Phoenix 框架用于在单台机器上实现 200 万个连接的调试技术之一。

如果您使用的是 Phoenix Web 框架,它附带了 Phoenix LiveDashboard,这是一个用于生产节点的 Web 仪表板,可提供与 Observer 类似的功能。

最后,请记住,您还可以通过在 IEx 中直接调用 Runtime_info/0 来获取运行时信息的简要概述。

其他工具和社区

我们只是触及了 Erlang VM 所提供的功能的皮毛,例如:

1.除了观察者应用程序之外,Erlang 还包括一个 :crashdump_viewer 来查看崩溃转储
2.与操作系统级跟踪器集成,例如 Linux Trace Toolkit、DTRACE 和 SystemTap
3.微状态会计衡量运行时在短时间间隔内花在几个低级任务上的时间
4.Mix 在配置文件命名空间下附带了许多任务,例如 mix profile.cprof 和 mix profile.fprof
5.对于更高级的用例,我们推荐优秀的 Erlang in Anger,它可作为免费电子书使用

祝您调试愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/717046.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web3.0链游农民世界开发搭建0撸狼人杀玩法模式定制开发

随着区块链技术的飞速发展,Web3.0时代的链游已成为游戏行业的新宠。本文将介绍一款基于Web3.0的链游——农民世界,如何定制开发0撸狼人杀玩法模式,以及该模式的专业性、深度思考和逻辑性。 一、背景介绍 农民世界是一款以农业为主题的链游…

5G消息 x 融媒 | 媒体融合新入口

5G消息 x 融媒 | 媒体融合新入口 5G 消息是 5G 时代三大运营商联合手机厂商推出的平台型应用,5G 消息以短信为入口,以富媒体消息为媒介,具有权威真实、全面覆盖、精准投放、内容汇聚、开放共享等特点。这些特点符合当下融媒体发展的需求&…

最新下载:Hype 4 mac版【软件附加安装教程】

Hype是一款强大的Mac OS平台 HTML5 创作工具,它可以在网页上做出赏心悦目的动画效果,创建丰富的网页交互动画,支持层、时间轴等编辑方式,并能很好的导出HTML5/CSS3/JavaScript,在台式机,智能手机和iPad上流…

C++类对象模型、类对象的存储方式、this指针、this指针的引出、this指针的特性、C语言和C++实现Stack的对比等的介绍。

文章目录 前言一、C类对象模型1. 类对象的存储方式2. 结构体内存对齐规则 二、this指针1. this指针的引出2. this指针的特性3. C语言和C实现Stack的对比 总结 前言 C类对象模型、类对象的存储方式、this指针、this指针的引出、this指针的特性、C语言和C实现Stack的对比等的介绍…

【论文阅读笔记】PA-SAM: Prompt Adapter SAM for High-Quality Image Segmentation

1.论文介绍 PA-SAM: Prompt Adapter SAM for High-Quality Image Segmentation PA-SAM:用于高质量图像分割的提示适配器SAM 2024年 ICME Paper Code 2.摘要 Segment Anything Model,SAM在各种图像分割任务中表现出了优异的性能。尽管SAM接受了超过10亿…

揭秘“湖仓一体”——Flink+Paimon+StarRocks,打造实时分析新纪元

1.湖仓一体 数据湖仓是 Flink 流批一体发挥重要作用的场景,使用 Flink Paimon starRocks 来构建湖仓一体数据分析. Apache Paimon 是一个专为实时数据处理而设计的湖表格式,它最大的亮点是使用了 LSM Tree 技术。与 Hudi 相比,Paimon 在更新插入&…

中国星网时空信息集团春招Offer面经

本文介绍2024届春招中,中国卫星网络集团有限公司下属中国时空信息集团有限公司中,业务助理岗位1场面试的基本情况、提问问题等。 2024年04月投递了中国卫星网络集团有限公司下属中国时空信息集团有限公司中的业务助理岗位,所属部门为运营中心…

第9章 类

第9章 类 9.1 创建和使用类9.1.1 创建 Dog 类9.1.2 根据类创建实例 9.2 使用类和实例9.2.1 Car 类9.2.2 给属性指定默认值9.2.3 修改属性的值 9.3 继承9.3.1 子类的方法__init__()9.3.2 给子类定义属性和方法9.3.3 重写父类的方法9.3.4 将实例用作属性9.3.5 模拟实物 9.4 导入类…

短URL服务设计

引言 在营销系统里,为了增加系统的活跃用户数,经常会有各种各样的营销活动。这类活动几乎都是为了充分利用存量用户的价值,促使他们分享产品或App以达到触达到更多用户的目的。又或者是出于营销目的,群发优惠券触达短信这种场景。…

充电学习—3、Uevent机制和其在android层的实现

sysfs 是 Linux userspace 和 kernel 进行交互的一个媒介。通过 sysfs,userspace 可以主动去读写 kernel 的一些数据,同样的, kernel 也可以主动将一些“变化”告知给 userspace。也就是说,通过sysfs,userspace 和 ker…

欣九康诊疗系统助力诊所向数字化转型

数字化已经成为各行各业转型的重点方向,而为了不被时代所淘汰,医疗机构也势必要紧跟潮流,本人作为门诊部的负责人深知医疗机构要想实现数字化转型那么拥有一款便捷实用的医疗平台是必不可少的,近几年,随着国家大力支持…

Ubuntu 在线或离线安装docker

查看自己的ubuntu版本 在终端中执行以下命令: lsb_release -a 终端中的复制粘贴: ctrl shift c ctrl shifr v 在线安装docker(不需要外网): 命令行安装:Ubuntu Docker -- 从入门到实践 看完…

Ollama:本地部署大模型 + LobeChat:聊天界面 = 自己的ChatGPT

本地部署大模型 在本地部署大模型有多种方式,其中Ollama方式是最简单的,但是其也有一定的局限性,比如大模型没有其支持的GGUF二进制格式,就无法使用Ollama方式部署。 GGUF旨在实现快速加载和保存大语言模型,并易于阅读…

香港Web3时代:比特币可以成为「收益性资产」吗?

原文标题:《CAN BITCOIN BE A PRODUCTIVE ASSET?》撰文:Pascal Hgli编译:Chris,Techub News本文来源香港Web3媒体 Techub News 比特币正在经历一场大的变化,人们对其性质有不同的看法。有些人将其视为日常交易的货币…

ANSYS EMC解决方案与经典案例

EMC问题非常复杂,各行各业都会涉及,例如航空、航天、船舶、汽车、火车、高科技、物联网、消费电子。要考虑EMC的对象很多,包含整个系统、设备、PCB、线缆、电源、芯片封装。而且技术领域覆盖广,涉及高频问题、低频问题&#xff1b…

AI大模型系统从入门到精通,看这一篇就够了

前言 2023 年,人工智能发展达到新的里程碑。自 GPT 系列和 LLaMA 系列等大规模语言模型及应用问世以来,AI 内部技术突飞猛进,能力迅速超越以往。这些“超级 AI 助手”看似便捷强大,但其背后复杂原理及潜在影响值得深入思考。 这些…

充电学习—5、healthed 电池服务

1、healthed服务监听接收内核kernel的电池事件,然后上传数据给framware层的batterysevice,BatteryService计算电池的电量,显示,绘制动画等 android电池系统框架: 2、healthd服务入口:android/system/cor…

本地安装nightingale监控分析服务并发布公网详细流程

文章目录 前言1. Linux 部署Nightingale2. 本地访问测试3. Linux 安装cpolar4. 配置Nightingale公网访问地址5. 公网远程访问Nightingale管理界面6. 固定Nightingale公网地址 前言 本文主要介绍如何在本地Linux系统部署 Nightingale 夜莺监控并结合cpolar内网穿透工具实现远程…

怎么把两个音频合成一个?将两个音频合成一个的四种方法

怎么把两个音频合成一个?在当今数字化的时代,音频处理已经成为我们生活中不可或缺的一部分。有时候,我们会希望将两段音频合成为一个,无论是为了制作音乐混音、创作声音效果,还是为了编辑播客节目或视频配音。合成音频…

Qt第三方库QHotKey设置小键盘数字快捷键

一、看了一圈没有找到可以设置小键盘的情况。 这两天在研究快捷键的使用。发现qt的里的快捷键不是全局的。找了两个第三方快捷键QHotKey,还有一个QxtGlobalShortcut。但是这两个都不能设置小键盘的数字。 比如QKeySequenceEdit (Ctrl1) 这个…