よくある質問(FAQ)

「無限ループ」が発生していることを確認する方法が分かりません。

無限ループの回避策について

質問

「無限ループ」が発生している可能性があるのですが、確認する方法が分かりません。確認する方法を教えてください。

回答

トレースモードを設定してシミュレーション実行することで、特定の行から行 (又は アドレスからアドレス) が繰り返し実行されている様子をシミュレーション実行ログ (Systemg.log 又は SX.log) で確認することができます。このシミュレーション実行ログ で「無限ループ」が発生しているか否かを判断します。単純に「ループ回数の多い処理」や「複数の関数を跨いだ大きなループ」ということもありますので、「無限ループ」の判断には 十分な注意をお願いします。

・トレースモードを設定してシミュレーション実行する方法 詳細はこちら
★注意 「トレースモードを設定してのシミュレーション実行」は著しく時間を要しますので、充分なシミュレーション時間経過後 シミュレーションを停止してください。
下記は、ループしたときの「シミュレーション実行ログ」の出力サンプルです。

【事例1】1行でループしているケース

【事例2】処理を伴ってループしているケース

【事例3】C標準関数 (ライブラリ)内でループしているケース
※ライブラリ内は、デバッグ情報が存在しないためアドレスで表示されます。(関数名、行番号は表示されません)
※関数の実行(メモリ割り付け)アドレスは、リンクマップファイルで確認できます。