喫茶XRAYトップページ

[スレッド全体
]

[9686] 無限ループの発見方法返信 削除
2016/4/3 (日) 23:41:31 ny
こんにちは。デルファイ2006ですが、
テストラン中に無限ループに入っているようです。
どこのループに入っているのか分からず困っています。
無限ループの再現性も確認できていません。(まずはこれが先なのですが)

何かいい方法ありませんか?
ご教授ください。

[9687] Re:無限ループの発見方法返信 削除
2016/4/4 (月) 00:24:48 igy
▼ nyさん
> こんにちは。デルファイ2006ですが、

ちなみに、Delphi2006(Borland Developer Studio 2006)には、
Update2とHotfix があると思うのですが、適用済みですか?


[9688] Re2:無限ループの発見方法返信 削除
2016/4/4 (月) 01:08:23 ny
>Update2とHotfix があると思うのですが、適用済みですか?
??
わかりません。ってことは未適応かと。
当方、無料バージョンのターボデルファイです。
OSはWIN10です。

[9689] Re3:無限ループの発見方法返信 削除
2016/4/4 (月) 07:42:42 igy
▼ nyさん
> >Update2とHotfix があると思うのですが、適用済みですか?
> ??
> わかりません。ってことは未適応かと。
> 当方、無料バージョンのターボデルファイです。


Turbo Delphiであれば、Hotfix-Rollupが出ているようですね。


[9690] Re4:無限ループの発見方法返信 削除
2016/4/4 (月) 07:55:38 Mr.XRAY
> Turbo Delphiであれば、Hotfix-Rollupが出ているようですね。

トラブルの内容によっては,Update や Hotfix を適用すると解決する場合が
あるので,一応適用しておいた方がいいと思われます.
では,このような情報はどうして入手するかですが,
例えば DEKO さんとこでも可能です.

[Delphi の製品情報]
http://ht-deko.com/Delphi/

で,肝心の無限ループの件ですが,難しいですね.
何か検出方法があるのかも知れませんが,私は知りません.
一つ一つチェックしていくしかないのかも知れません.

過去の記憶では,ループが永久に続いてしまう,というのがありました.
これは,主にループを抜け出す条件判定の問題ですね.
そういうことがチェックしやすいコーディングを心掛けるとか... (^^;


[9691] Re5:無限ループの発見方法返信 削除
2016/4/4 (月) 08:29:31 igy
あと、無限ループ と書かれていますが、なぜ、無限ループってわかったのですか?
(単にプログラムが暴走しているってことは、ないですか?)


[9693] Re6:無限ループの発見方法返信 削除
2016/4/4 (月) 10:41:01 Mr.XRAY
> あと、無限ループ と書かれていますが、なぜ、無限ループってわかったのですか?

無限ループということが分かっているのであれば,
ループしている場所で発生していることになりますね.

while, repeat, フックなんかもループの一種ですね.


[9694] Re7:無限ループの発見方法返信 削除
2016/4/4 (月) 11:22:37 igy
▼ nyさん
> どこのループに入っているのか分からず困っています。
> 無限ループの再現性も確認できていません。(まずはこれが先なのですが)


そもそも、この現象が発生したのは、どういう状況からですか?
例えば、
・何かの機能を追加した後から発生。追加する前は起こっていなかった・・・とか。
・Windows Xpでは問題なかったが、Windows 10にしたら発生した・・とか。


[9695] Re8:無限ループの発見方法返信 削除
2016/4/4 (月) 12:18:07 ny
皆様、ご教授ありがとうございます。
>なぜ、無限ループってわかったのですか?
テストランさせている際、固まってしまい、CPUメーターが上昇。
while内の条件判断が怪しいのですが、無限ループ中にコード内に中断マークを複数張っても止まらず、
問題個所を発見できません。
実行を中断させると、コードに戻れました。

実行中にコード側ウインドウの下ウインドウに「スレッドなんたら・・」と出てきますので、
それを手掛かりに、と、思ったのですが・・・・

>Windows 10にしたら発生した
ではないです。対象プログラムは10年位異状なく使っているもので、
今回機能を追加作成中で。
無限ループの再現ができればよいのですが。

「Update ・ Hotfix」を探してみます。


[9696] Re9:無限ループの発見方法返信 削除
2016/4/4 (月) 13:04:16 igy
▼ nyさん
> 中断マークを複数張っても止まらず、

その場所に到達する前に暴走しているとかは、ないですか?


[9697] Re10:無限ループの発見方法返信 削除
2016/4/4 (月) 18:45:50 Mr.XRAY
> その場所に到達する前に暴走しているとかは、ないですか?

本題とは直接関係ないかも知れませんが,最近経験した現象です.
ある Windows API の関数を使用したコードなんですが,
引数に与える値によっては,関数が永久に終了しないのがありました.

MSDN で調べたら,そのようなことがないように,その関数のコールバック関数を
作成して,コールバックの中で処理してください.

というのがありました.
コールバック関数なんかつくっていられんわい !! ( <-- つくれよ !? )
ということで,その関数を実行する前に引数の値をチェックする処理を追加
しました.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82