在ClojureScript中获取堆栈跟踪

时间:2011-10-05 16:35:01

标签: clojurescript

在我在Ubuntu 10.04.1 LTS上运行FireFox 5.0的ClojureScript程序中,当抛出异常时,我得到一条神秘的线。

'错误:调用方法时没有为类型对象定义的协议方法ISeqable.-seq:[object Object]':[nsIDOMEventListener :: handleEvent]

“-seq”位对我来说似乎很奇怪,我搜索了生成的javascript文件,但没找到它。

我希望我不会遗漏一些完全明显的东西,但是如何获得抛出异常的堆栈跟踪?你是如何调试脚本的?

2 个答案:

答案 0 :(得分:2)

不幸的是,错误的堆栈跟踪依赖于浏览器支持。大多数(全部?)浏览器允许您通过取消引用“堆栈”来访问堆栈跟踪的罐装版本(通常是前10个元素,iirc)作为字符串。字段,所以你可以做这样的事情:

(try ...throws...
    (catch js/Error e
        (.log js/console (.-stack e))))

然而,字符串堆栈跟踪并不是很有趣,您无法单击它们将您带到源。更好的是将异常目录打印到javascript控制台(如果它可用)以打印带有可点击链接的堆栈跟踪。 E.g。

(try ...throws...
    (catch js/Error e
        (.log js/console e)))

至少在chrome中,只有在抛出错误时javascript控制台处于打开状态时才有效。这非常适合调试,但在错误意外时不太有用。

大多数浏览器提供的javascript控制台对象都有很多有用的功能,可以从clojurescript中使用。如果你想获得有用的行号,你可能想写几个宏来注入要打印到控制台的代码,否则所有的行号都将指向你的打印功能。

答案 1 :(得分:1)

看起来您正在将Javascript对象传递给期望Clojure序列的Clojurescript函数。尝试(my-function (js->clj my-thing))编辑:或者,我猜你正在使用(.strobj)你不需要