请教下用nrepl怎么debug呢?

118 views
Skip to first unread message

bruce li

unread,
Feb 24, 2013, 2:20:47 AM2/24/13
to cn-cl...@googlegroups.com
大家好,我目前使用emacs + nrepl写clojure,但是看起来nrepl没有debug支持,在需要断点调试的时候非常难受(加一堆print...)

ritz提供了nrepl支持..但是..ritz这个东西经常各种抽风,比如, nrepl-ritz-break-on-exception可以打开但是没法关掉, 代码里面作者有两个我感觉写得有问题的地方,见: https://github.com/pallet/ritz/issues/81  但是把这两个地方改过之后,还是不能关闭break-on-exception. 这样在不需要debug的时候(比如load代码),仍然会弹出各种ClassNotFound之类的exception(这些exception在相应的lib中应该都是被catch, 并且handle了的). ritz还有一个问题是启动速度极慢...

其他的debugger,例如,debug-repl,只能支持使用stdin 的repl,例如terminal...

想请教各位使用nrepl的朋友,平时是如何调试程序的..

James Xu

unread,
Mar 7, 2013, 10:07:28 PM3/7/13
to cn-cl...@googlegroups.com
以前有过同样的疑问,在IRC里面问了一下,technomancy是这么说的,因为Clojure鼓励交互式的开发,几乎不需要debug,他唯一一次debug,结果发现是Clojure本身的bug(用的是cdt)


2013/2/24 bruce li <leil...@gmail.com>


--
中文社区博客:http://blog.clojure.cn/
中文问答网站:http://ask.clojure.cn/
中文邮件列表:https://groups.google.com/d/forum/cn-clojure?hl=zh-CN
---
您收到此邮件是因为您订阅了 Google 网上论坛的“CN-Clojure”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 cn-clojure+...@googlegroups.com
要向此网上论坛发帖,请发送电子邮件至 cn-cl...@googlegroups.com
通过以下网址访问此论坛:http://groups.google.com/group/cn-clojure?hl=zh-CN。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
 
 



--

Neo Lee

unread,
Mar 8, 2013, 5:11:46 AM3/8/13
to cn-cl...@googlegroups.com
可以用 ritz,但确实如楼上所说,断点调试在 FP 里不是那么必须。


2013/3/8 James Xu <xumingmin...@gmail.com>



--
No, I will not fix your computer!

neo...@gmail.com

bruce li

unread,
Mar 8, 2013, 6:04:33 AM3/8/13
to cn-cl...@googlegroups.com
谢谢两位回答。

Clojure 交互式开发确实很多时候不需要调试,但在特定的时候,例如,一些由函数返回的函数在执行过程中出错,现有的stacktrace不能很好的提供相关上下文信息,而且函数名称也是很奇怪的,比如 xxxxxx$xxxxxx$G_12345,这样很难看出出错函数是哪个,同样在多步let中,某一步出错了也看不到上下文,写monad的时候写错一点也是一样的道理--可能是我用clojure几个月,水平跟各位差距还很大,反正感觉调试器还是很必要的(一直盼望clojure有类似于用slime写common lisp的调试体验 >_<,slime-ritz, swank-clojure或多或少有各种问题,比如不能强制终止执行...). 

目前ritz感觉还没有到可以顺利使用的地步,具体问题已经在主楼里面说了,break-on-exception关不掉,于是调试过一次后,只有重启repl了--... 而且ritz启动一次真心慢,遇到nrepl抽风了,重启一下要等很久... 另外貌似CDT目前只有swant-cdt(集成在swank-clojure里), 而且看起来似乎版本有一些旧了,最新的版本仍然是for clojure 1.3的,不知道在1.4及以后能不能顺利使用。..

Liutos

unread,
Mar 8, 2013, 8:48:36 AM3/8/13
to cn-cl...@googlegroups.com

像slime那样的调试功能也不是一蹴而就的,耐心等待一下吧,clojure总会有的

James Xu

unread,
Mar 8, 2013, 9:49:19 AM3/8/13
to cn-cl...@googlegroups.com
我其实也想有个好用的debuger,可以像用Eclipse debug Java代码一样debug Clojure的代码,可能我们对Clojure的领悟、使用还没有达到technomancy那个熟练程度、那个高度吧。

Shouxun Yang

unread,
Mar 8, 2013, 10:13:58 AM3/8/13
to cn-cl...@googlegroups.com

交互式地开发,代码短小,控制负作用,的确很少需要调试器的。很多时候加点print 语句就差不多够用了。好像某个大牛在coders at work 里就是这样说的。

dennis zhuang

unread,
Mar 13, 2013, 3:52:01 AM3/13/13
to cn-cl...@googlegroups.com
HouseMD推荐试试,淘宝的同事写的一个交互式的java debug工具,类似GDB,也可以用于clojure。我想过写个clojure插件,一直没去做。过去写的介绍性博客


不过在我的实际开发中,几乎没有用到debug功能,测试+println搞定一切。
庄晓丹
Email:        killm...@gmail.com xzh...@avos.com
Site:           http://fnil.net
Twitter:      @killme2008


Shen, Feng

unread,
Mar 13, 2013, 4:15:57 AM3/13/13
to cn-cl...@googlegroups.com
一般情况下,println足够了。

如果你需要断点调试,可以试一下 idea  (eclipse试过了,有些问题,它找不到文件)

把project导入idea。 一种可行的办法是: lein pom,让idea导入pom.xml

Clojure 程序设置JVM启动参数:
  -Xdebug -Xrunjdwp:transport=dt_socket,address=9092,server=y,suspend=n


Inline image 1


周六,lisp聚会时,如果时间允许,我会演示一下。


2013/2/24 bruce li <leil...@gmail.com>
test.png

Qiu Xiafei

unread,
Mar 13, 2013, 5:22:31 AM3/13/13
to cn-cl...@googlegroups.com
idea有clj插件,可以直接import project.clj


2013/3/13 Shen, Feng <she...@gmail.com>
test.png

Drift Crow

unread,
Jun 15, 2013, 1:56:07 AM6/15/13
to cn-cl...@googlegroups.com
有个项目Spyscope 的方式还不错,看起来挺方便的,也符合FP的习惯

jaime

unread,
Jun 17, 2013, 2:51:04 AM6/17/13
to cn-cl...@googlegroups.com
如果你真要经常print的话,可以试试我这个小工具(它就是为了省去print的麻烦),感觉还算便利:https://github.com/xiejianming/dbkid

在 2013年2月24日星期日UTC+8下午3时20分47秒,bruce li写道:
Reply all
Reply to author
Forward
0 new messages