6

Ubuntu 10.04.1 LTS の FireFox 5.0 で実行している ClojureScript プログラムでは、例外がスローされたときに 1 行の不可解な行が表示されます。

「エラー: タイプ オブジェクトに対して定義されたプロトコル メソッド ISeqable.-seq がありません: [オブジェクト オブジェクト]」メソッドを呼び出すとき: [nsIDOMEventListener::handleEvent]

「-seq」ビットは奇妙に思えます。生成された JavaScript ファイルを検索しましたが、見つかりませんでした。

完全に明らかな何かを見逃していないことを願っていますが、スローされた例外のスタックトレースを取得するにはどうすればよいですか? スクリプトをどのようにデバッグしていますか?

4

2 に答える 2

3

残念ながら、エラーからのスタック トレースはブラウザのサポートに依存しています。ほとんどの (すべての?) ブラウザーでは、'stack' フィールドを逆参照することにより、スタック トレースの定型バージョン (通常は上位 10 要素、iirc) に文字列としてアクセスできるため、次のようなことができます。

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

ただし、文字列のスタック トレースはあまり面白くありません。クリックしてソースに移動することはできません。例外ディレクトリを JavaScript コンソール (利用可能な場合) に出力して、クリック可能なリンクを含むスタック トレースを出力することをお勧めします。例えば

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

少なくともクロムでは、エラーがスローされたときにJavaScriptコンソールが開いていた場合にのみ機能します。これはデバッグには最適ですが、予期しないエラーの場合にはあまり役に立ちません。

ほとんどのブラウザーが提供する JavaScript コンソール オブジェクトには、clojurescript から使用できる便利な機能がたくさんあります。ただし、役立つ行番号を取得したい場合は、コンソールに出力するコードを挿入するマクロをいくつか作成する必要があります。そうしないと、すべての行番号が印刷関数を指します。

于 2013-03-07T11:51:18.740 に答える
1

Clojureシーケンスを期待するClojurescript関数にJavascriptオブジェクトを渡しているようです。編集してみてください(my-function (js->clj my-thing)):または、必要のない場所で(.strobj)を使用していると思います

于 2011-10-09T23:37:03.230 に答える