喫茶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