Clojure调试

Tuo*_*nen 7 debugging functional-programming clojure

如何调试clojure?是否有像Eclipse调试器这样的类似工具,或者我是否必须使用REPL和print语句来追踪错误?

如果后者,我怀疑功能范式的好处是否优先于原始/缺乏工具?毕竟,使Java如此优秀的原因不是语言,而是帮助编码,重构和调试的出色工具.只有clojure显示模糊的Java堆栈跟踪而不是翻译的错误消息以发现问题的事实让我趾高气扬.

我不禁得到clojure生态系统不完整的印象,并且在生产中使用它会比收益更麻烦.想象一下,一个新手调试了其他人编写的clojure中的错误,没有适当的工具来介入代码.

我真的想学习这门语言,希望我的印象是错误的.语法方面,语言因其简单性和一致性而感觉舒适.

Shl*_*omi 7

我使用在cider(emacs)中找到的很棒的调试器,我听说cursive(intellij)也有一个非常好的调试器.

就个人而言,我发现clojure不亚于生产代码.我可以将调试器连接到生产过程(如果需要),调试并重新定义事物以便快速修复,而无需关闭或重新加载过程.我发现工具很精彩,emacs非常强大,你有重构(如果你真的需要它,我几乎没有在clojure中使用它而不是java)和几乎你需要的任何其他东西.使用苹果酒甚至可以很好地显示堆栈痕迹.

对我来说,现在,在java中编写生产代码的想法给了噩梦.. :)

  • 完全不是,请查看 [spacemacs](http://spacemacs.org/) 和 [evil-mode](https://www.emacswiki.org/emacs/Evil),它会将你的 emacs 变成 'vi ' 但是尽管有 emacs 的所有好处(天哪,有这么多......) (2认同)
  • Intellij + Cursive很棒.REPL和调试器Cursive耗材很棒.IntelliJ现在已经让我失去了"较小的IDE". (2认同)

Jos*_*osh 7

emacs有调试,IntelliJ + Cursive有调试,Eclipse等.谷歌搜索任何这些将产生更多信息.我使用intelliJ,它的调试器功能齐全,很好,允许你在clojure和java核心代码中放置断点.

最初我使用了一个带有clojure的调试器,每隔几个月我就会在问题出现时把它拉出来.但是调试器并非全都被破解.例如,在处理异步代码时,调试器不是很有用.REPL驱动(和测试驱动)开发相比传统的"编译和运行"过程(像java这样的语言所需),并且几乎不需要调试器,这是一个很大的优势.

Clojure堆栈跟踪只是java堆栈跟踪,混合了clojure代码.如果java堆栈跟踪不会让你的眼睛流血,那么一个clojure应该不会更糟.堆栈跟踪的问题似乎是人们实际上并没有阅读它们.

我不同意你对Java的评论; Java有许多积极因素,首先是它的无处不在,这是因为"一次编写,随处运行",一些非常好的核心库,以及更多.但重构和调试(几乎)完全与语言本身无关.而且我会说Clojure的工具非常简单.依赖性很容易处理.简而言之,您不会因为调试器而选择语言,尽管上面提到的编辑器/ IDE有一些好的可用.

我们在遍布全球的庞大的主要生产系统上运行clojure,许多其他公司也这样做.Java生态系统为关键系统的clojure提供了一个特别适合的主机.

想象一下,一个新人调试了其他人编写的clojure中的错误......

新手学习clojure并调试一些代码可能在某些情况下想要使用上面提到的调试器之一,但在大多数情况下,他或她将更好地理解先发生了什么,更熟悉clojure,然后才求助于调试器.


Mic*_*ott 5

Clojure提供了多个调试器,以及一些用于检测代码的聪明方法.

在来到Clojure(来自Python,Ruby等)之前,我通常不会打扰调试器.但我一直使用CIDER的调试器(Emacs),并发现它非常有用,因为它的简单性和简单的设置(键序列C-u C-c C-c).在CIDER项目页面上有一个很好的小型GIF演示 (如下所示),这里有一个广泛的8分钟 视频演示.由于Clojure鼓励小型和 引用透明的功能,因此测试和可调试性对于许多功能来说都是直截了当的.

苹果酒调试

在GIF中要注意的是,代码正在您的实际代码缓冲区中直接执行n,并且中间结果在右侧显示为内联.自创建GIF以来,现在包含更多功能.

苹果酒还具有"启蒙模式",可以在评估后向您显示就地价值.这是一个很好的 GIF示例.它的工作原理类似于调试模式,你需要打开它(M-x cider-enlighten-mode)然后eval并运行该函数.

除此之外,还有 Sayid调试器和分析器.视频中有一个非常详细的演练.它有点复杂,但看起来非常强大,也可以进行分析.Bill显然致力于让它在Emacs中运行良好,但也有努力使它与Vim/Fireplace一起工作; 见vim-sayid.

是一个很好的调试文章,提到和ol' println方法,以及spyscopeclojure.tools.trace,其他有用的方法.

您可以使用数据显示器超越spyscope,以获得图形化和格式良好的调试可视化.