Error handling 如何在ClojureScript错误消息中找到我自己的函数?
我是一个新的ClojureScript用户,我正在使用编写一个应用程序。在大多数情况下,当我收到一条错误消息(来自ClojureScript)时,我会从库中得到一个以JavaScript代码结尾的调用堆栈。这是意料之中的,但我没有从堆栈中自己的代码中获得函数!有时候,我根本没有收到任何ClojureScript函数调用,只有JavaScript。有没有办法在这些错误消息中看到堆栈的顶部?或者查看堆栈中我的代码/命名空间中的最后一个函数Error handling 如何在ClojureScript错误消息中找到我自己的函数?,error-handling,clojure,stack-trace,clojurescript,re-frame,Error Handling,Clojure,Stack Trace,Clojurescript,Re Frame,我是一个新的ClojureScript用户,我正在使用编写一个应用程序。在大多数情况下,当我收到一条错误消息(来自ClojureScript)时,我会从库中得到一个以JavaScript代码结尾的调用堆栈。这是意料之中的,但我没有从堆栈中自己的代码中获得函数!有时候,我根本没有收到任何ClojureScript函数调用,只有JavaScript。有没有办法在这些错误消息中看到堆栈的顶部?或者查看堆栈中我的代码/命名空间中的最后一个函数 这可能对我有很大帮助。即使是很小的错误(例如,在地图通话中交
这可能对我有很大帮助。即使是很小的错误(例如,在地图通话中交换操作员的位置)也很难跟踪。我应该做错了什么。据说ClojureScript错误消息是一种后天养成的习惯。由于编译器的工作方式,错误消息可能是神秘的 帮助ClojureScript错误消息更具可读性的是安装或使用fork。这其中包括:
:hints
功能试图增加未捕获的异常和错误对象,以包含一些与此类错误相关的附加知识。它尝试获取原始源文件,提取相关部分以显示更多上下文,并在那里标记javascript错误。这只适用于:optimizations none编译器模式,默认情况下它是禁用的,因为它依赖于monkey补丁
cljs webtools
已经对其进行了大量改进)
- 启用自定义格式化程序
- 使用
CMD-ALT-J
- 使用
或按三个点进入设置F1
- 选中Console下的“启用自定义格式化程序”
- 在
project.clj
{:builds [{:id "dev" :source-paths ["src/cljs"] :figwheel {:on-jsload "blabla.core/reload"} :compiler {(...) :preloads [devtools.preload] :external-config {:devtools/config {:features-to-install :all}}}}
:dependencies [[binaryage/dirac "RELEASE"]]
- 安装
- 在启用远程调试的情况下运行Chrome
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary \ --remote-debugging-port=9222 \ --no-first-run \ --user-data-dir=$A_PATH_TO_YOUR_USER_PROFILE_DIRECTORY
- 将
添加到binaryage/dirac
项目中的依赖项。clj
{:builds [{:id "dev" :source-paths ["src/cljs"] :figwheel {:on-jsload "blabla.core/reload"} :compiler {(...) :preloads [devtools.preload] :external-config {:devtools/config {:features-to-install :all}}}}
(或使用另一种方法):dependencies [[binaryage/dirac "RELEASE"]]
如果使用默认包含的
cljs devtools
,我无法安装Dirac(可能是因为我运行的是Linux,没有Chrome Canary)。devtool工作正常,但没有添加太多信息。还有其他建议吗?@dilvan这是CLJ/CLJS经历中不幸的一部分。做我所做的:习惯滚动。很快你就会知道你要去哪里,以及如何发现最有用的错误。此外,如果您可以使用Figwheel,它可能会产生更多有用的错误,直接切入正题。@kennytilton如果CLJS编译输出(不知何故)不显示来自core.CLJS
(或只显示一小部分)的错误消息,不是更好吗?这将使信息对每个人都更加清晰。Clojure1.9引入了规范。clojure.core库中的函数具有规范。如何设置clojureScript项目以使用规范并在运行时测试clojure.core函数?@dilvan Hmmm我希望它能打印更多信息。对我来说是的。你能分享你的代码,你得到了什么输出,你期望得到什么输出吗?clojure.spec针对具有的输入进行验证。