W32TeX でインストールした LuaTeX beta-0.95.0 を TeXworks から呼び出して走らせると、
LuaTeX のプロセスがクラッシュするという現象に見舞われています。
TeXworks 0.6.0 (travis-ci) [r.e6d213b, 2016/04/03 18:34]
Win7 64bit (Professional)
です。同様の現象が再現する方はいらっしゃるでしょうか?
以下、詳細です:
A\bye
とだけ書いた test.tex を TeXworks から
luatex.exe
$synctexoption
$fullname
で呼び出すと、ログの表示が
This is LuaTeX, Version beta-0.95.0 (TeX Live 2016/W32TeX)
restricted system commands enabled.
(./test.tex
Process crashed
となります。これだと何も情報がないので、test.tex を
\tracingall A\bye
にしてみると
This is LuaTeX, Version beta-0.95.0 (TeX Live 2016/W32TeX)
restricted system commands enabled.
(./test.tex
{vertical mode: \tracingstats}
{\tracingpages}
{\tracingoutput}
{\tracinglostchars}
{\tracingmacros}
{\tracingparagraphs}
{\tracingrestores}
{\showboxbreadth}
{\showboxdepth}
{\errorstopmode}
{\tracinggroups}
{\tracingifs}
{\tracingscantokens}
{\tracingnesting}
{\tracingassigns}
{the letter A}
{horizontal mode: the letter A}
\bye ->\par \vfill \supereject \end
{\par}
@firstpass
[]\tenrm A
@\par via @0 b=0 p=-10000 d=100
@@1: line 1.2- t=100 -> @0
%% goal height=643.20255, max depth=4.0
{vertical mode: \vfill}
\supereject ->\par \penalty -\@MM
{\par}
% t=10.0 g=643.20255 b=10000 p=0 c=100000#
{\penalty}
% t=10.0 plus 1.0fill g=643.20255 b=0 p=-20000 c=-20000#
{globally changing \outputpenalty=0}
{into \outputpenalty=-20000}
\output->{\plainoutput }
{entering output group (level 1) at line 1}
\plainoutput ->\shipout \vbox {\makeheadline \pagebody \makefootline }\advancep
ageno \ifnum \outputpenalty >-\@MM \else \dosupereject \fi
{internal vertical mode: \shipout}
{entering vbox group (level 2) at line 1}
{reassigning \bodydir TLT}
{reassigning \pardir TLT}
{reassigning \textdir TLT}
\makeheadline ->\vbox to\z@ {\vskip -22.5\p@ \line {\vbox to8.5\p@ {}\the \head
line }\vss }\nointerlineskip
{\vbox}
{entering vbox group (level 3) at line 1}
{reassigning \bodydir TLT}
{reassigning \pardir TLT}
{reassigning \textdir TLT}
{\vskip}
\line ->\hbox to\hsize
{\hbox}
{entering adjusted hbox group (level 4) at line 1}
{reassigning \bodydir TLT}
{reassigning \pardir TLT}
{reassigning \textdir TLT}
{restricted horizontal mode: \vbox}
{entering vbox group (level 5) at line 1}
{reassigning \bodydir TLT}
{reassigning \pardir TLT}
{reassigning \textdir TLT}
{internal vertical mode: end-group character }}
{leaving vbox group (level 5) entered at line 1}
{restricted horizontal mode: \the}
{\hfil}
{end-group character }}
{leaving adjusted hbox group (level 4) entered at line 1}
{internal vertical mode: \vss}
{end-group character }}
{leaving vbox group (level 3) entered at line 1}
\nointerlineskip ->\prevdepth -1000\p@
{\prevdepth}
\pagebody ->\vbox to\vsize {\boxmaxdepth \maxdepth \pagecontents }
{\vbox}
{entering vbox group (level 3) at line 1}
{reassigning \bodydir TLT}
{reassigning \pardir TLT}
{reassigning \textdir TLT}
{\boxmaxdepth}
{changing \boxmaxdepth=16383.99998pt}
{into \boxmaxdepth=4.0pt}
\pagecontents ->\ifvoid \topins \else \unvbox \topins \fi \dimen@ =\dp \@cclv \
unvbox \@cclv \ifvoid \footins \else \vskip \skip \footins \footnoterule \unvbo
x \footins \fi \ifr@ggedbottom \kern -\dimen@ \vfil \fi
{\ifvoid: (level 1) entered on line 1}
{true}
{\else: \ifvoid (level 1) entered on line 1}
{\fi: \ifvoid (level 1) entered on line 1}
{\dimen0}
{reassigning \dimen0=0.0pt}
{\unvbox}
{\ifvoid: (level 1) entered on line 1}
{true}
{\else: \ifvoid (level 1) entered on line 1}
{\fi: \ifvoid (level 1) entered on line 1}
{\iffalse: (level 1) entered on line 1}
{false}
{\fi: \iffalse (level 1) entered on line 1}
{end-group character }}
{restoring \boxmaxdepth=16383.99998pt}
{leaving vbox group (level 3) entered at line 1}
\makefootline ->\baselineskip 24\p@ \lineskiplimit \z@ \line {\the \footline }
{\baselineskip}
{changing \baselineskip=12.0pt}
{into \baselineskip=24.0pt}
{\lineskiplimit}
{reassigning \lineskiplimit=0.0pt}
\line ->\hbox to\hsize
{\hbox}
{entering adjusted hbox group (level 3) at line 1}
{reassigning \bodydir TLT}
{reassigning \pardir TLT}
{reassigning \textdir TLT}
{restricted horizontal mode: \the}
{\hss}
{select font cmr10}
{reassigning current font=\tenrm}
\folio ->\ifnum \pageno <\z@ \romannumeral -\pageno \else \number \pageno \fi
{\ifnum: (level 1) entered on line 1}
{false}
{\else: \ifnum (level 1) entered on line 1}
{\number}
{the character 1}
{\fi: \ifnum (level 1) entered on line 1}
{\hss}
{end-group character }}
{leaving adjusted hbox group (level 3) entered at line 1}
{internal vertical mode: end-group character }}
{restoring \baselineskip=12.0pt}
{leaving vbox group (level 2) entered at line 1}
Completed box being shipped out [1]
Process crashed
というところで落ちます。
・コマンドプロンプトからは正常に test.pdf が出る
・pdftex や xetex は正常
・luatex-w32.tar.xz の beta-0.80.0 は正常、luatex-dev-w32.tar.xz の beta-0.95.0 だけ落ちる
ので不思議です。
Linux でも floating point exception で落ちたので,gdb にかけてみました.
(gdb) r -synctex=1 test
Starting program: /usr/local/texlive/2016/bin/x86_64-linux/luatex -synctex=1 test
This is LuaTeX, Version beta-0.95.0 (TeX Live 2016)
restricted system commands enabled.
(./test.tex
Program received signal SIGFPE, Arithmetic exception.
0x00000000005719b6 in synctex_record_glue (p=355) at ../../../source/texk/web2c/synctexdir/synctex.c:1680
1680 len = SYNCTEX_fprintf(SYNCTEX_FILE, "g%i,%i:%i,%i\n",
(gdb) l
1675 {
1676 int len = 0;
1677 # if SYNCTEX_DEBUG > 999
1678 printf("\nSynchronize DEBUG: synctex_glue_recorder\n");
1679 # endif
1680 len = SYNCTEX_fprintf(SYNCTEX_FILE, "g%i,%i:%i,%i\n",
1681 SYNCTEX_TAG_MODEL(p,glue),
1682 SYNCTEX_LINE_MODEL(p,glue),
1683 synctex_ctxt.curh UNIT, synctex_ctxt.curv UNIT);
1684 if (len > 0) {
(gdb) p synctex_ctxt.curh UNIT
Division by zero
(gdb) p synctex_ctxt.unit
$1 = 0
なぜかゼロ割りが起こっているようです.
(# define UNIT / synctex_ctxt.unit)
ちなみに,trunk だと落ちるのですが,experimental の方だと落ちないような気がします.
(gdb) r -synctex=1 test
Starting program: /usr/local/texlive/2016/bin/x86_64-linux/luatex -synctex=1 test
This is LuaTeX, Version beta-0.95.0 (TeX Live 2016)
restricted system commands enabled.
(./test.tex
Program received signal SIGFPE, Arithmetic exception.
0x00000000005719b6 in synctex_record_glue (p=355) at ../../../source/texk/web2c/synctexdir/synctex.c:1680
1680 len = SYNCTEX_fprintf(SYNCTEX_FILE, "g%i,%i:%i,%i\n",
(gdb) l
1675 {
1676 int len = 0;
1677 # if SYNCTEX_DEBUG > 999
1678 printf("\nSynchronize DEBUG: synctex_glue_recorder\n");
1679 # endif
1680 len = SYNCTEX_fprintf(SYNCTEX_FILE, "g%i,%i:%i,%i\n",
1681 SYNCTEX_TAG_MODEL(p,glue),
1682 SYNCTEX_LINE_MODEL(p,glue),
1683 synctex_ctxt.curh UNIT, synctex_ctxt.curv UNIT);
1684 if (len > 0) {
(gdb) p synctex_ctxt.curh UNIT
Division by zero
(gdb) p synctex_ctxt.unit
$1 = 0
なぜかゼロ割りが起こっているようです.
(# define UNIT / synctex_ctxt.unit)
ちなみに,trunk だと落ちるのですが,experimental の方だと落ちないような気がします.