2011-10-26 8 views
3

サーバープログラムが無限ループにあります。それを確認するには?サーバープログラムが無限ループにあります。それを確認するには?

私のソリューション:

がループを制御する条件変数の値を確認するためにGDBを使用しています。

小さなプログラムでも問題ありません。

大きなプログラムの場合はどうすればいいですか?

プログラムがGDBで実行されていない場合、エンドレスループを検出するにはどうすればよいですか?

おかげ

+2

音が停止問題のようですか? – Mysticial

答えて

6

watchdog timerという形式を使用できます。プログラムに文字を出力させるか、定期的にファイルに触れるようにしてください。ループ内に停滞すると、別のプロセスがウォッチドッグが更新されていないことを検出し、プロセスを強制終了/リセットします。

多くのマイクロコントローラにはハードウェアが内蔵されており、タイマーをリセットしないと自動的にリセットされます。これは非常に便利です:)

1

プログラムがサーバー上で実行されている場合は、そのPIDを与えることによってそれにGDBプロセスを添付することができます。 PSを使用したプロセスのpidを探したとえばので

psの斧| grepのserver_process

3789 ?? S  0:00.58 /usr/bin/server_process 
3790 ?? S  0:00.58 /usr/bin/server_process 
18002 ?? S  0:00.58 grep server_process 

あなたはおそらく子供が欲しい:

ので、実行中のプロセス

gdb /usr/bin/server_process 3790 

に接続するためにGDBを使用し....負荷シンボル

gdb> 

ハッピートレース:)

もちろん、server_processをプログラム名とパスに置き換えてください。P

1

無限ループを検出することは、Halting problemと呼ばれ、決まりません。

したがって、原則としてそれを検出する確実な方法はありません。

関連する問題