4

最近、 C ++でgdbを使用して逆デバッグを使用し始めました。これは、特定の種類の問題(ループ、再帰アルゴリズムなど)に対して非常にうまく機能します。gdbの他に、C / C ++用の他の商用デバッガー(UndoDBなど)があります。

他の言語用の優れたリバーシブルデバッガーがあるのだろうか?私は特にJavaとRubyに興味がありますが、質問はどの言語にも当てはまります。

私が見つけた別の方法は、仮想マシンでアプリケーションを実行して接続することです。私が知っている(しかしテストしたことのない)唯一の実装は、VMwareのリプレイデバッグです。どのタイプのデバッグタスクに適しているのだろうか。最も一般的な問題ではやり過ぎのようですが、一般に再現が難しい通信または同期の問題をデバッグするのに役立つ場合があります。

背景情報:

  • 「リバースデバッグ」という用語は、gdbで使用されます。ただし、多くの同義語があります。
    • 「リバーシブルデバッグ」
    • MicrosoftはそれをIntelliTraceまたは「HistoricalDebugging」と呼んでいます
    • Javaでは、このようなデバッガーは「OminiscientDebugger」と呼ばれることもあります。
  • (programmers.stackexchangeで)リバースデバッグがめったに使用されないのはなぜですか?
4

4 に答える 4

2

Jivaは、次のことができると主張しています。

JIVEは、Javaプログラムの順方向と逆方向の両方のステッピングをサポートします。...後退する機能を提供することで、プログラマーはエラーが発生するまでプログラムを再実行する時間と労力を節約できます。JIVEには、実行履歴の前のポイントに直接戻って、そのポイントのオブジェクト図を観察する機能もあります。

于 2013-01-04T21:55:16.180 に答える
2

なぜリバースデバッグはめったに使用されないのですか?(programmers.stackexchangeで)、Jakob Engblomは、リバースデバッグの現在の状態に関するすばらしい要約を投稿しました。

于 2013-01-07T04:42:56.800 に答える
1

このかなり遅れた返事をお詫びします。はい、JIVEの逆ステップはデバッグに非常に効果的です。実行履歴の任意のポイントにステップまたはジャンプして戻ることができます。

また、実行履歴に対してクエリを実行することもできます。たとえば、「xへのすべての変更を表示する」、「xが最初に負になったのはいつですか」、「このコード行は実行されたことがありますか。実行された場合はどこですか?」などです。単純なフォームベースのクエリを介して行われます。

http://www.cse.buffalo.edu/jive

于 2014-07-29T04:46:36.730 に答える
1

Omniscient Debugging著者のBilLewisの論文でODBと呼ばれているものを見ることができます。ODBは、Javaでの逆デバッグを実現するためのオフラインログおよび再生方法の実装です。

于 2017-10-11T06:47:25.443 に答える