サーバープログラムが無限ループにあります。それを確認するには?サーバープログラムが無限ループにあります。それを確認するには?
私のソリューション:
がループを制御する条件変数の値を確認するためにGDBを使用しています。
小さなプログラムでも問題ありません。
大きなプログラムの場合はどうすればいいですか?
プログラムがGDBで実行されていない場合、エンドレスループを検出するにはどうすればよいですか?
おかげ
サーバープログラムが無限ループにあります。それを確認するには?サーバープログラムが無限ループにあります。それを確認するには?
私のソリューション:
がループを制御する条件変数の値を確認するためにGDBを使用しています。
小さなプログラムでも問題ありません。
大きなプログラムの場合はどうすればいいですか?
プログラムがGDBで実行されていない場合、エンドレスループを検出するにはどうすればよいですか?
おかげ
watchdog timerという形式を使用できます。プログラムに文字を出力させるか、定期的にファイルに触れるようにしてください。ループ内に停滞すると、別のプロセスがウォッチドッグが更新されていないことを検出し、プロセスを強制終了/リセットします。
多くのマイクロコントローラにはハードウェアが内蔵されており、タイマーをリセットしないと自動的にリセットされます。これは非常に便利です:)
プログラムがサーバー上で実行されている場合は、その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
無限ループを検出することは、Halting problemと呼ばれ、決まりません。
したがって、原則としてそれを検出する確実な方法はありません。
音が停止問題のようですか? – Mysticial