こうもとです。 「Keni Matsuda」さんの書かれた、 「[debian-users:49003] Re: tcshがセグメンテーション違反」についての返事です。 幸か不幸か、再現してしまいました。 今度は、別のマシンで再現させる方法も確立できました。 まず結論から書きますと、.historyの読み込み時に落ちています。 その、落ちる.historyは添付します(文字は置換しています)。 そのときの、straceの結果も添付します。 > 4. 過去コマンドヒストリーで何か ASCII 以外の文字をコマンド文字列 > で指定していないか これ、非常に重要でした。 > 5. tcsh の実行前に指定する LANG と、tcsh を実行して tcsh のセッション > に入った後で実行する setenv LANG の値の組合せを変えてテスト > してみるとどうなるか .historyをリネームすればば落ちず、戻せば落ちるので、履歴を読み込む ときのLANG指定が問題とみてよいと思いました。 なので、これは試しませんでした。 > 6. strace でシステムコールを追ってみてどこで落ちるかみてみる 今度は、いつでも再現する環境が整ったので、とりました。 とても長いので、落ちているところだけ。 alarm(0) = 0 rt_sigprocmask(SIG_SETMASK, NULL, [], 8) = 0 rt_sigprocmask(SIG_SETMASK, [INT], NULL, 8) = 0 rt_sigprocmask(SIG_SETMASK, NULL, [INT], 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 read(6, "\370\243\370\243\370\243\370\243\370", 9) = 9 read(6, "\n", 1) = 1 read(6, "#", 1) = 1 read(6, "+", 1) = 1 read(6, "1", 1) = 1 read(6, "1", 1) = 1 read(6, "9", 1) = 1 read(6, "0", 1) = 1 alarm(0) = 0 rt_sigprocmask(SIG_SETMASK, NULL, [], 8) = 0 rt_sigprocmask(SIG_SETMASK, [INT], NULL, 8) = 0 rt_sigprocmask(SIG_SETMASK, NULL, [INT], 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 --- SIGSEGV (Segmentation fault) @ 0 (0) --- +++ killed by SIGSEGV +++ Process 11366 detached ---------------------------------------------------------------------- 河本陽一(こうもとよういち) mailto:youichi@xxxxxxxxxxxxxx
Attachment:
tcshbug.tgz
Description: Binary data