土村です。 From: Hideya Hane <wing@xxxxxxxx> Subject: [vine-users:050340] Re: TeX のヴァージョン表示ができません? Date: Sun, 12 May 2002 14:55:25 +0900 (JST) Message-ID: <20020512.145525.26300706.wing@xxxxxxxx> wing> From: Haruhiko Okumura <okumura@xxxxxxxxxxxxxxxxx> wing> Date: Sun, 12 May 2002 08:12:39 +0900 (JST) wing> okumura> うちでは自分で make したものについては再現せず,Vine のだけで起こるの okumura> で不思議に思っていました。コンパイラが違うためかもしれませんね。 wing> wing> Vine-2.1 から rebuild の gcc-2.95.3-2vl15 に差し wing> 替えた環境で、tetex-1.0.7-0vl14 を rebuild したも wing> のでも、問題は再現しませんでした。glibc とかも含め wing> て、微妙な問題があるのかもしれませんね。 Vine2.5 標準の gcc でも、 version.c にデバッグライト1行書き加えるだけで core dump しなくなりました。運次第ということでしょうか。 こんなことではデバッグできないので、 Electric Fence のお世話になりました。 malloc 関連のデバッグには結構役立ちますので、簡単に紹介してみます。 Vine には標準で入っているようですので、すぐに使えます。 リンクする時の gcc のオプションの最後に -lefence を加えるだけです。 今回の例を書いてみます。 % apt-get source tetex <== SRPM を取得します ファイル依存を処理しています... 完了 パッケージリストを読みこんでいます... 完了 依存情報ツリーを作成しています... 完了 取得パッケージ: 45.3MB のソースアーカイブを取得します。 (省略) % rpm -ihv tetex-1.0.7-0vl14.src.rpm tetex ################################################## % cd ~/rpm/SPECS/ % rpm -bc tetex.spec <== コンパイルします 実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.62446 .... (省略) % cd ../BUILD/teTeX-1.0/texk/web2c/ptex-3.0.1/ ./Makefile を編集 -- CFLAGS に "-g" を書き加える。 -- LOADLIBES の最後に "-lefence" を書き加える。 % touch version.c % make (省略) % ./ptex.exe -version ↓ Electric Fence が動いてる証拠 Electric Fence 2.0.5 Copyright (C) 1987-1998 Bruce Perens. セグメントエラー (coreを出力しました) % gdb ./ptex.exe core.19204 <== 止まった場所を確認します GNU gdb 5.0 Copyright 2000 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux"... Core was generated by `./ptex.exe -version'. Program terminated with signal 11, Segmentation fault. Reading symbols from /usr/lib/libkpathsea.so...done. Loaded symbols for /usr/lib/libkpathsea.so Reading symbols from /lib/libm.so.6...done. Loaded symbols for /lib/libm.so.6 Reading symbols from /lib/libc.so.6...done. Loaded symbols for /lib/libc.so.6 Reading symbols from /lib/ld-linux.so.2...done. Loaded symbols for /lib/ld-linux.so.2 #0 0x0807d32f in printversionandexit ( banner=0x8080ec0 "This is pTeX, Version p3.0.1, based on TeX, Version 3.1415 9", copyright_holder=0x8080eb0 "D.E. Knuth", author=0x0) at version.c:27 27 work_banner[len+1] = 0; <== 止まった場所が特定できました (gdb) list <== ソースの前後を表示させてみる 22 #endif 23 24 len = strlen(banner); 25 work_banner = xmalloc(len + 1); 26 strcpy(work_banner, banner); 27 work_banner[len+1] = 0; 28 29 token_start = work_banner; 30 token_end = strchr(token_start, ','); 31 len = token_end - token_start - sizeof("This is"); こんな具合にデバッグしました。 ----- 土村 展之 Nobuyuki Tsuchimura tutimura@xxxxxxxxxxxxxx http://www.nn.iij4u.or.jp/~tutimura/