[リストへもどる]
一括表示

投稿時間:2002/11/12(Tue) 20:48
投稿者名:ねむら
Eメール:
URL :
タイトル:
スタックエラー
こんにちは。久しぶりに書き込ませて頂きます。
早速なんですが、宜しくお願い致します。
今、自作プログラムを監視してそのプログラムが
フリーズしたら再起動するプログラムを作っています。
しかし、監視しているプログラムを起動させると
以下のようなエラーが出てしまいます。

---------------------------------------------------------------
(監視しているファイル名) のスタック エラーです。
モジュール : KERNEL32.DLL、アドレス : 0177:bff7431f
Registers:
EAX=8197c998 CS=0177 EIP=bff7431f EFLGS=0020028
EBX=00659f06 SS=017f ESP=00659ee8 EBP=00659f40
ECX=c1683850 DS=017f ESI=00659f3a FS=194f
EDX=000294c4 ES=017f EDI=00658f88 GS=0000
Bytes at CS:EIP
:
eb 95 8b 54 24 04 50 e8 04 00 00 00 58 c2 04 00
Stack dump:
bff7432b 00000000 bff53cb9 000294c4 00000000 00000000 0065
9f0e 8f0aa167 439ba167 00001657 00010000 00180000 08a80000
08a80000 00010018 0000000
---------------------------------------------------------------

『自作プログラムからiniファイルに3秒毎に書き込みをして
監視プログラムでそのiniファイルの内容を3秒毎に読み込む。
その内容が10回読みに行っても更新されなかったら再起動をかける。』
というような監視方法でも、
『自作プログラムから、あるテキストをOPENして書き込みを行い、
CLOSEされたのが確認できたら監視プログラムからそのテキストをOPENして読込みを行う。
その内容が10回読みに行っても更新されなかったら再起動をかける。』
というような監視方法でも、
『監視プログラムからSendMessageを自作プログラムに投げ、
応答が10回なかったら再起動をかける。』
という監視方法でも同じエラーが出てしまいます。

良い方法をご存知の方はいらっしゃいませんでしょうか。
Win98SE、VB6.0を使っています。
宜しくお願い致します。

投稿時間:2002/11/13(Wed) 00:01
投稿者名:Say
Eメール:
URL :
タイトル:
Re: スタックエラー
スタックがオーバーフローするような処理をしている、ということです。
リカーシブコールしている関数/プロシージャはないか、
(たとえば
Private Sub subA()
    Call subA()
End Sub
)
無限相互呼び出ししている関数/プロシージャはないか、
(たとえば
Private Sub subA()
    Call subB()
End Sub
Private Sub subB()
    Call subA()
End Sub
)
チェックしてみてください。

また、ローカル変数の大量宣言・定義もオーバーフローの一因になります。
関数/プロシージャの引数や戻り値の場合も同様です。

ループ系ステートメントの深いネストもそれなりにスタックを消費します。
(通常はさほど問題になりませんが、再帰してる場合は注意したほうがいいでしょう。)

投稿時間:2002/11/13(Wed) 09:11
投稿者名:ねむら
Eメール:
URL :
タイトル:
Re^2: スタックエラー
Sayさんお返事ありがとうございます。
さっそく調べてみたいと思います。
また何かありましたら宜しくお願い致します。