[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:2816]Portable dumper



Shuichi KITAGUCHI <kit@xxxxxxxxxxx> writes:

> 本質には関係ないですが、手元の FreeBSD 上では
> 
> ・emacs.c
>   #include <sys/stat.h> がなくて、struct stat のサイズなんか知らんで、
>   と怒られた。

手元にあるものでは build system を変えたので、emacs.c で
stat は使わなくなりました。

> ・alloc.c
>   #include <stdio.h> がなくて、stderr が定義されてないで、と怒られた。

Debug 出力のためだけに stdio.h を include するのも何だかな、
と思ったので、単に abort するようにしました。

今の local と前の patch の差分は次の mail で送ります。

> んで、C-xC-f でファイルを開こうとして、C-i で completion すると、
> 永野さんがおっしゃってたように Fgarbage_collect() で落ちました。
> その core を gdb で見てみましたが、この mark_object() の呼び出しの
> 山を理解できるようになるには、かなり修行が必要そうですね...(^^;

GC の最中に落ちるのは、ほぼ間違いなく GC 以外のどっかが heap
を破壊しているので、mark_object を見てもあんまり情報は得られ
ません。でも、手元では再現しないので、もしよろしければ以下の
ものを実行した結果を教えてください。GC で、ということなので
一番怪しそうなのは unmark_pdumped_objects がちゃんと動いてい
ない、ということですが、これは単なる想像です。

ところで、 ./temacs -q -nw の直後に M-x garbage-collect でも
落ちますか? たぶん、この方がもうちょっときれいな stack trace
が得られると思います。

まず、cd src してから gdb ./temacs core を実行します。

とりあえずどこで落ちているかの情報が欲しいので、bt を実行し
て最後の mark_object の frame を見つけてから frame 3 みたいな
感じでその frame にいったときの出力を見せてください。

Emacs は mark bit を使い回しているので、ちゃんと動くかどうか
はわかりませんが、
p obj
xtype
で Lisp の型がわかるので、xsymbol や xstring などを使って得
られるその object の情報を教えてください。(xsymbol 等は
.gdbinit 参照)

たぶんその object は壊れているので、まともな object が得られ
るまで stack を up していって、各 stack での pobj xtype
xsymbol etc. を実行した結果。

どの object がおかしいのかを見れば少しは原因を推測できそうな
気がしますが、手元では発生しないので何とも言えません。

ところで、永野君の方は OS は何なんでしょう?
# あんまり access できる OS の数は多くないのですが、Solaris 
# で動くかどうか試してみます。

-- 
Yoshiki Hayashi