1

現在デバッグ中のプログラムで、経過時間を変数として使用しています。私がこれをデバッグしているとき、望ましくない結果を与える変数を調べている間、経過時間変数はまだ増加し、デバッグを無効にします。時間を凍結したり、変数の変更を停止したりする方法はありますか?(私はSystem.currentTimeMillis()時間を計算するために使用しています)。

編集:時間の経過とともに移動するオブジェクトがスペースにありますSystem.currentTimeMillis()。これは、経過した時間を計算するために使用しているため、デバッグでは機能しません。これを回避する方法があるかどうか知りたいのですが、ありがとうございます。

4

3 に答える 3

2

この種の問題に対する一般的なアプローチの1つは、依存性注入を使用することです。タイムソースで初期化(注入)されるクラスClock(たとえば)を作成します。本番コードでは、このソースはSystem.nanotime()またはSystem.currentTimeMillis()である可能性があります。デバッグでは、制御可能なクロックを使用します。Clockクラスのデバッグ実装には、シミュレートされた時間を使用できるようにする追加のメソッド(suspend()、resume()、setClockTo()など)があります。

于 2012-03-23T07:22:04.513 に答える
2

System.currentTimeMillis()本来の機能を実行します。命令が実行された瞬間の時間を与えます。「変数を調べている」とき、プログラムスレッドは中断されますが、時間はまだ進んでいます...したがって、時間は増加します

于 2012-03-15T15:14:55.637 に答える
0

別の方法は、System.currentTimeMillis()を使用しないことです。これはかなり複雑です。デバッグしているときに、コードの実行中に一歩前進する時間を計りたいからです。

最善の解決策は、この要件を変更して、これが問題にならないようにすることです。

たとえば、タイムアウトが短い場合、デバッガーで実行しているときにタイムアウトを増やすことができます。

于 2012-03-15T15:16:00.387 に答える