我正在使用 CounterClockWise 在 Windows 7 操作系统上开发我的第一个 Clojure 项目。除了 javascript(我不太熟悉),这是我的第一个动态类型语言。
构建我的项目最困难的部分是调试我遇到的问题。我一直在使用的技术是println
在一些地方撒上 s 来确认我的输入和输出是我想要的。
与 Java 相比,似乎很多 Clojure 函数都接受了我认为是垃圾输入的内容并愉快地返回 nil。因此,您看到的运行时异常可能来自许多远离问题原因的函数。我的意思是,甚至很难知道把println
s 放在哪里。
而且,这些运行时异常会输出已编译的代码行号,因此它们的信息量不是很大。我的大部分功能都很短且无副作用,但问题是我的输入是网页。有时函数的输入是原始 html,有时是解析后的 html(通过 enlive),有时是链接列表(通过在解析后的 html 上使用类似 css 的选择器)。这些输入可能是深度嵌套的复杂结构(即:地图列表的地图列表),因此手工构建它们并不容易。当你有一个没有指向问题的堆栈跟踪时,我几乎必须调试我的一半程序并弄清楚如何为每个部分生成输入。这非常耗时。
在 IRC 频道上,有人告诉我堆栈跟踪库,它使调试变得更加容易。它仍然指出许多功能远离错误输入的来源,但它仍然很有帮助。我正在寻找更多这样的技术。我可以使用哪些技术来更好地调试我的代码?