マクロ実行で秀丸本体がフリーズNo.16228
h.u. さん 03/12/23 11:31
 
マクロを実行すると秀丸本体がフリーズする現象に困っています.
解決のヒントを教えて頂けないでしょうか.

問題が生じるマクロは,
TeXcom98(+GuiShell 1.39.1)
http://argent.shinshu-u.ac.jp/otobe/tex/book/1999revise.html
祝鳥 ver 0.72
http://www.ms.u-tokyo.ac.jp/~abenori/mycreate/fortex.html
の2つです.

ともにTeXの統合環境で,コンパイル関係の質問を実行すると秀丸が
フリーズします.タスクマネージャー等で強制終了させようとしても

   このプログラムを終了できません.デバッグ中である場合は,
   プログラムを再開するか,またはデバッガを終了してください.

との警告が出て終了できません.
OSのシャットダウンも出来ないので,スイッチを押してOSを強制
シャットダウンさせるより他になくなります.

どこに原因があるのか正直分からないのですが,実際にフリーズしている
のは秀丸ですので,今回こちらに投稿させて頂きました.

# TeX関係のBBSにも投稿しましたが,返信を得られませんでした.

なお,TeX自体は,コマンドラインやGUI環境から正常に実行できます.

---
環境:Win2K+SP4; 秀丸4.04(3.19でも確認)

[ ]
RE:16228 マクロ実行で秀丸本体がフリーズNo.16234
秀まるお2 さん 03/12/24 14:21
 
 一応サイトー企画としてコメントさせていただきます。

 一般に、秀丸エディタが何らかの理由でフリーズした場合でも、タスクマネー
ジャから強制終了できないことは無いはずです。少なくとも、秀丸エディタ側と
して、プログラムを強制終了できなくするような特殊なことはしてないはずです。

 なので、フリーズする原因も、そのフリーズした秀丸を強制終了できない理由
もよく分かりません。

 マクロを実行している最中にフリーズするのでしたら、例えばそのマクロの中
の「ここで固まってるかな?」と思わしき箇所の前後に、

    message "100行目通過";

 のようなデバッグ用のメッセージを出すようにしておけば、具体的にマクロが
固まっている箇所が特定できると思います。それで具体的に固まっているマクロ
命令が何か分かれば、それが解決のヒントになるんじゃないかと思います。

 可能性としては、runsync系の文(runsync、runsyn2)が怪しいと思います。
それを検索して、例えば

    runsync "zzzz.exe";

 のような文があれば、

    message "runsync zzzz.exe開始";
    runsync "zzzz.exe";
    message "run終了";

 みたいに書き換えて実行してみると何か分かるかもしれないです。

[ ]
RE:16234 マクロ実行で秀丸本体がフリーズNo.16239
あべのり さん 03/12/24 16:01
 
こんにちは,祝鳥を作っておりますあべのりです.

祝鳥としても,タスクマネージャから無理となるような処理はしていないので,酷く
不思議です.

とりあえず,

loaddll macrodir + "\\fortex\\sub\\macrodll.dll";
$com = getinistr(macrodir + "\\fortex\\ini\\" + getenv("USERNAME") + "\\pack
age\\textodvi.ini","TeXToDVI","Command") + " " + basename;
##r = dllfunc("COMPILE_START",hidemaruhandle(0),$com,directory);
freedll;
endmacro;
というようなマクロを作成してtexファイルを開いた状態で実行してみて,これでも
固まるかどうかを見ていただけるとうれしいです.

[ ]
RE:16239 マクロ実行で秀丸本体がフリーズNo.16252
h.u. さん 03/12/25 09:14
 
>秀まるお2 様
ありがとうございました.
デバッグをする方法ですが,プログラムの知識がないので
どこにmessage文を入れるべきかよく分かりませんでした.
貴重なヒントを頂いたにも関わらず申し訳ありません.

>あべのり 様
貴重なコメントをありがとうございました.
>loaddll macrodir + "\\fortex\\sub\\macrodll.dll";
>$com = getinistr(macrodir + "\\fortex\\ini\\" + getenv("USERNAME") + "\\pac
>kage\\textodvi.ini","TeXToDVI","Command") + " " + basename;
>##r = dllfunc("COMPILE_START",hidemaruhandle(0),$com,directory);
>freedll;
>endmacro;
このマクロをマクロフォルダにおいて実行しましたが,特にフリーズする
こともありませんでした.

なお,試してみて分かったのですが,"dviに変換して表示"を実行した際,
dviファイルが存在しない場合はコンパイルを実行した後に秀丸がフリーズ
し,既にdviファイルが存在する場合はコンパイルを実行せずに固まるよう
です.いずれの場合もdvioutは開きません.

[ ]
RE:16252 マクロ実行で秀丸本体がフリーズNo.16254
あべのり さん 03/12/25 12:40
 
おはようございます.

>このマクロをマクロフォルダにおいて実行しましたが,特にフリーズする
>こともありませんでした.
>
>なお,試してみて分かったのですが,"dviに変換して表示"を実行した際,
>dviファイルが存在しない場合はコンパイルを実行した後に秀丸がフリーズ
>し,既にdviファイルが存在する場合はコンパイルを実行せずに固まるよう
>です.いずれの場合もdvioutは開きません.
恐らくTeXのコンパイルではなく,dvioutの起動及びプレビュー時に固まっているよ
うです.
というわけで,.texファイルを開き,dviファイルが存在する状態で以下のマクロを
実行してみてください.

$dviout = getinistr(macrodir + "\\fortex\\ini\\" + getenv("USERNAME") + "\\p
ackage\\dviout.ini","DVIOUT","Path");
$dvi = leftstr(filename,strlen(filename) - strlen(filetype)) + ".dvi";

message "dvioutをDDE初期化します.";
ddeinitiate "dviout","dviout";
if(!result){
 message "DDE失敗.dvioutを起動します.実行するdvioutは\n" + $dviout;
 run "\"" + $dviout + "\"";
 if(!result){
  message "起動失敗.マクロを終了します.";
  endmacro;
 }
 message "dvioutを再度DDE初期化します.";
 ddeinitiate "dviout","dviout";
 if(!result){
  message "DDE失敗.マクロを終了します.";
  endmacro;
 }
}
message "ddeexecute : [WinNormal]";
ddeexecute "[WinNormal]";
message "dderequest : dvifile";
$nf = dderequest("dvifile");
message "ddeexecute : [FileOpen]";
ddeexecute "[FileOpen(" + $dvi + ")]";
message "DDEを終了します.";
ddeterminate;
message "DDEを終了しました.";
endmacro;

dvioutを操作する際にメッセージを表示するようにしておきましたので,これで何処
で固まってるかわかると思います.

[ ]
RE:16254 マクロ実行で秀丸本体がフリーズNo.16255
h.u. さん 03/12/25 13:59
 
>あべのりさま
ありがとうございます.

>というわけで,.texファイルを開き,dviファイルが存在する状態で以下のマクロを
>実行してみてください.

試してみましたところ,秀丸はフリーズしませんでした.
メッセージは以下の通りです.

dvioutをDDI初期化します
DDE失敗.dvioutを起動します.実行するdvioutは C:\dviout\dviout.exe
(ここでdviout起動)
dvioutを再度DDE初期化します
ddeexecute : [WinNormal]
dderequest : dvifile
ddeexecute : [FileOpen]
DDEを終了します.
DDEを終了しました.


[ ]
RE:16255 マクロ実行で秀丸本体がフリーズNo.16256
秀まるお2 さん 03/12/25 14:17
 
 横から失礼します。

 DDEを実行する時に、プロセス間のSendMessageに反応しないウィンドウが存在
していると固まってしまいます。

 例えば秀丸と何らかのソフトがDDEで通信していて、それとはまったく関係な
いウィンドウがハングアップして固まっていると、秀丸側のDDEもいっしょに固
まってしまいます。ddeml.dllを使ってddeを処理してる限り、これを回避する方
法はたぶん無いと思います。

 その可能性(他の何らかのウィンドウがSendMessageに応答しない)が一番高
いんじゃないかと思います。

 ということで、これはあくまで「試してみて欲しい」レベルの話になりますが、
秀丸以外に起動されてそうなソフト(例えばアンチウィルスソフトなど)があれ
ば、それらを全部終了させた状態で試してみてはどうでしょ?

[ ]
RE:16255 マクロ実行で秀丸本体がフリーズNo.16257
あべのり さん 03/12/25 14:28
 
>試してみましたところ,秀丸はフリーズしませんでした.
>メッセージは以下の通りです.
れれれ……

では,fortex\sub\package\dviout\preview.mac
を以下のように変更してみて試してもらえますか?

9行目
$RootDir = macrodir + "\\fortex\\";

messgage "preview.mac起動";
$RootDir = macrodir + "\\fortex\\";

51行目
if(!existfile($$1))return false;

message "サブルーチンDVIPreview起動";
if(!existfile($$1))return false;

53行目
ddeinitiate "dviout","dviout";

message "DDE初期化";
ddeinitiate "dviout","dviout";

63行目
run "\"" + $dviout + "\"" + $$val;

message "DVIOUT起動";
run "\"" + $dviout + "\"" + $$val;

69行目
ddeinitiate "dviout","dviout";

message "DDE初期化";
ddeinitiate "dviout","dviout";

70行目
ddeexecute "[WinNormal]";

message "[WinNormal]";
ddeexecute "[WinNormal]";

75行目
ddeexecute "[FileOpen(" + $$1 + ")]";

message "[FileOpen]";
ddeexecute "[FileOpen(" + $$1 + ")]";

77行目
ddeexecute "[WinNormal]";

message "[WinNormal]";
ddeexecute "[WinNormal]";

82行目
if(dderequest("dvifile") != $$1){

message "dderequest";
if(dderequest("dvifile") != $$1){

87行目
ddeterminate;

message "ddeterminate";
ddeterminate;

[ ]
RE:16257 マクロ実行で秀丸本体がフリーズNo.16261
h.u. さん 03/12/25 22:06
 
あべのり様,秀まるお様,度々ありがとうございます.

結論から申し上げると,dvioutの再インストールで問題は解決しました.
あべのり様のご指摘でdvioutの呼出しに問題があるとのことでしたので,
試しにインストールしたところ,祝鳥,TeXmacとも問題なく動作するようです.

なお,dviout再インストール前にpreview.macのデバッグを試しましたが,
そのときは3つ目の警告"DDEを初期化"で固まりました.

最後になりますが,改めてお二方に感謝いたします.

[ ]
RE:16261 マクロ実行で秀丸本体がフリーズNo.16262
h.u. さん 03/12/25 22:32
 
先程の書き込みに重大な瑕疵がありました.
「ZoneAlarmを止めた場合」問題は解決する
の誤りでした.

>あべのり様,秀まるお様,度々ありがとうございます.
>
>結論から申し上げると,dvioutの再インストールで問題は解決しました.
>あべのり様のご指摘でdvioutの呼出しに問題があるとのことでしたので,
>試しにインストールしたところ,祝鳥,TeXmacとも問題なく動作するようです.
>
>なお,dviout再インストール前にpreview.macのデバッグを試しましたが,
>そのときは3つ目の警告"DDEを初期化"で固まりました.
>
>最後になりますが,改めてお二方に感謝いたします.

[ ]