Error handling 如何在ClojureScript错误消息中找到我自己的函数?

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)时,我会从库中得到一个以JavaScript代码结尾的调用堆栈。这是意料之中的,但我没有从堆栈中自己的代码中获得函数!有时候,我根本没有收到任何ClojureScript函数调用,只有JavaScript。有没有办法在这些错误消息中看到堆栈的顶部?或者查看堆栈中我的代码/命名空间中的最后一个函数


这可能对我有很大帮助。即使是很小的错误(例如,在地图通话中交换操作员的位置)也很难跟踪。我应该做错了什么。

据说ClojureScript错误消息是一种后天养成的习惯。由于编译器的工作方式,错误消息可能是神秘的

帮助ClojureScript错误消息更具可读性的是安装或使用fork。这其中包括:

  • 功能

    :hints
    功能试图增加未捕获的异常和错误对象,以包含一些与此类错误相关的附加知识。它尝试获取原始源文件,提取相关部分以显示更多上下文,并在那里标记javascript错误。这只适用于:optimizations none编译器模式,默认情况下它是禁用的,因为它依赖于monkey补丁

  • 更好地展示

    更好的堆栈跟踪示例(来自Dirac,但
    cljs webtools
    已经对其进行了大量改进)

  • 装置
    • 启用自定义格式化程序
    • 使用
      CMD-ALT-J
    • 使用
      F1
      或按三个点进入设置
    • 选中Console下的“启用自定义格式化程序”
    CLJSWebTools (见):

    • 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针对具有的输入进行验证。