JavaScript、例外、開発者コンソール
2017-09-04
Techメモです。
Opalでプログラムを書いているとき、例外のバックトレースが開発者コンソール上で綺麗に表示されるときとそうでないときがあるので困っている。
綺麗ってなんやねんという話ですけど、こういうのが綺麗な状態です。

それで望ましくない状態がこれ。

stackというプロパティにバックトレースが入ってると思うんですが、それが単なる文字列として表示されてしまってるんですよね。これが上のように1行1項目で表示されてほしい、という話。Opalでraise "asdf"とするとこのようになってしまう。
ちなみにいろいろ試した結果、上の2パターン以外に第3のパターンがあることがわかりました。下のはOpal内で%x{ throw "asdf"; }した場合で、source mapが効いてるような感じの出力ですね。これはこれで悪くなさそう。

いろいろなものをraiseしてみる
で、さらに試した結果、raise Exceptionだとちゃんと表示されるけどStandardErrorなどのサブクラスだと駄目ということがわかりました。ExceptionはJSのErrorが(Opal的な)直接の親クラスなので、そのへんの違いなんでしょうか…。
raise Exception.new("this is Exception")

raise StandardError.new("this is StandardError")

納得いかないのはTimeのようなErrorとの継承関係にないものをthrowしたときはちゃんと表示されることなんですよね。
ex = Time.new
`throw ex;`

このへん詳しい人いたら教えてほしいです。