« character subsets 28bytes | トップページ | Hack The Cell »

2008.11.02

拙作の Elisp が abort するのは、なんでなんだぜ?

Meadow2 で使っていたスクリプトが、Meadow3 で動かず。

症状的には re-search-forward 後の replace-match で args-out-of-range エラーが出て止まる(事がある)。
毎回違うタイミングで止まるので、単純な問題では無い模様。

問題切り分けの為に、emacs22 on cygwin でテストしたら同様に動かず。

障害トレースをするのにビルドの楽そうな Linux 上で emacs22 ビルドしてテストしたら、障害発生せず( ゚Д゚)

しょうがないので、やっぱり cygwin で 同じソースで emacs22 ビルドしようとしたら、案の定すんなりは行かず。

それでも頑張ってビルドを通してテストしたら、やっぱり障害発生。確認したケースでは search.c::replace-match -> insdel.c::replace_range と流れてきて、replace_range の最後、signal_after_change の呼び出し後に置換文字列オブジェクト new がぶち壊れている様な感じ。

本当にそのタイミングで壊れたのか、どこか壊れていたのが表面化しただけなのかは不明。cc-mode の関数も多用しているし。

で、家で調査続けようとして、cygwin上で emacs22 をビルドしようとしたら、別の症状が出てビルド通らず。

パトラッシュ、もう疲れたよ…

--追記11/04

仕方無いので会社で調査継続。after-change-functions フック中の c-after-change 後に問題発生を観測。これは cc-mode のバージョン(5.31.4)にもよりそうだなぁ。

で、自作スクリプト側を after-change-functions を解除した状態で実行される様に改変したところ無事通りました。やったよパトラッシュ。
原因完全特定までは至ってないけど、もういいよね?

Emacsハカーだと、こういう場合にどう調査・対処するんだろうな。

|

« character subsets 28bytes | トップページ | Hack The Cell »

コメント

コメントを書く



(ウェブ上には掲載しません)




« character subsets 28bytes | トップページ | Hack The Cell »