Eclipseデバッガーに戻る方法は?


129

Eclipseデバッガーで逆実行を行うことは可能ですか?現在取り組んでいるプロジェクトでは、ファイルからデータを読み取って初期化してから、何でも行うことができます。デバッガでオーバーステップした場合、プログラムを終了して再起動する必要があり、これにはかなりの時間がかかります。

回答:


136

Eclipseのdrop to frameコマンドを使用して、現在のメソッドを上から再入力できます。ただし、発生した状態の変化は展開されないため、現在のメソッドの種類によっては機能しない場合があります。

実際に時間を遡って進むことができるもう1つの本当にクールなツールは、Omniscient Debuggerです。クラスローダーにロードされるときにクラスをインストルメント化することで機能するため、コードが実行するすべてのことを記録できます。「いつ、どこで、なぜこのフィールドに現在の値が割り当てられたのか」などの非常に優れた機能を実行できます。UIはかなり不格好で、大きなコードベースを処理するのに苦労する場合がありますが、場合によっては、かなりの時間を節約できます。

更新Chrononは、「DVR for Java」と呼ばれる商用製品を提供します。これは、ODBと同じことをたくさん行うようです。


@マット・マクヘンリーODB1.5を使おうとしていた。スタンドアロンのJavaプログラムを使用していますが、それを動作させる方法がわかりませんか?スタンドアロンおよびEclipseで動作させる手順を説明するODBサイト以外のリソースはありますか?
アユスマン2012

@Ayusman:いいえ、申し訳ありません。ODBサイトにあるもの以外に共有できるものはありません。特に、新しい.classファイル形式で動作しない場合でも、私は驚かないでしょう。:(
マット・マクヘンリー

面白い答え!
KrishPrabakar 2015年

Omnscient DebuggerのWebサイトがドメイン分割されたようです。
するThorbjörnRavnアンデルセン

45

以前の回答で言及されたものを超えて-つまり、スタックビューでデバッグを再起動するEclipseのフレームへのドロップ機能(グローバル/静的データを元に戻さない)と、少し生であまり多くないOmniscientデバッガ進化-(実行)時間に「戻る」ために使用できるEclipseベースのツールがいくつかあります。

JIVEはEclipse Javaデバッガーを拡張して、プログラムの状態を記録する機能を備えています。JIVEパースペクティブは、プログラムの実行中に更新されるいくつかの有用なUMLダイアグラムを提供します。これらの図は、アプリケーションの状態(オブジェクト図)とスタックトレース(シーケンス図)の概要を提供します。記憶されたトレースをクエリして、時間を前後に進み、対応する図を表示できます。

Diverはメソッド呼び出しのみを記録し、JIVEのようなプログラムの状態は実際には記録しません。すべてのメソッド呼び出しイベントは、後で取得して分析できるように保存されます。主にフィルターを指定するために、Javaの実行およびデバッグ構成を拡張します。トレースは、実行時に一時停止/再開/フィルタリングできます。記録されると、Diverパースペクティブはそれをインタラクティブなシーケンス図に表示できます。

JIVEとDiverは、学術研究から発行されたオープンソースプロジェクトです。2012年11月現在、両方のプロジェクトがアクティブです。

Chrononは商用製品ですが、学生とオープンソースプロジェクトの無料ライセンスがあります。彼らのウェブサイトで主張されているものから、記録された履歴を再生し、前後に進み、時間旅行デバッグを可能にするので、それはおそらく最も包括的なレコーダーでしょう。また、Eclipseは録音には必要ありません。

これらのプラグインはすべてリソースが非常に貪欲なので、優れたスペックのマシンを用意し、そのフィルター機能を使用するのが最善です。それらを正常に実行するための明確な要件は、eclipse.iniのヒープ領域拡張することです。

私の場合、私はJIVEとDiverを使用してXML解析プログラムをデバッグしようとしましたが、リソース不足のため常にEclipseがフリーズしていました。ダイバーはLinux 64ビット実行するのが難しいかもしれません、それはこれらのヒントを使用してubuntu 32ビットおよびおそらく他の32ビットディストリビューションで動作します。DiverはWindowsで動作しますが、Windows 64ビット+ 64ビットJVMで動作します。それ以外の場合、32ビットウィンドウでの最大ヒープ領域は1.3〜1.6 GBに制限されます。JIVEは私のLinux 64ビットでうまく動作し、他のプラットフォームでも問題なく動作するようです。


ダイバーは中止されました
merours

12

はい、Eclipse CDTは履歴デバッガー機能をサポートしています。

デバッグ構成 -> デバッガ -> 起動時にリバースデバッグを有効にするを開きます。

を押すよりも、shift+F5またはshift+F6ステップバックのように、F5またはF6ステップフォワードのことができます。


1
このオプションはEclipseのすべてのバージョンに存在しますか?どこかで見つかれば危険だ。
EngineerBetter_DJ

1
このbugs.eclipse.org/bugs/show_bug.cgi?id=258284リクエストによってEclipseでサポートされたGDB機能sourceware.org/gdb/wiki/ReverseDebug。ええと、2009
セルゲイ

CDTでアクセスできます。
セルゲイ

私はJava開発者なので、CDTはあまり役に立たないと思いますか?
EngineerBetter_DJ

@Sergei WIndows 7 SP1で古いSpringsourceバージョンを使用してこれを行っています。逆デバッグを有効にするには、最初に次のようにデバッグする必要があります->デバッグ構成->メイン。ページの下部には、プロセスランチャーがあります。「Standard Create Process Launcher」と表示され、「Select other ...」へのハイパーリンクが表示されます。これをクリックして、[Use configuration specific settings]がオンになっていることを確認してから、[GDB(GSF)Create Process Launcher]を選択して[OK]をクリックします。「GDB(GSF)Create Process Launcherの使用」がメインタブの下部に表示されます。
サミー

5

私は偏見がありますが、クロノンはまさにあなたが探していることをします。

Drop to Frameは、メソッドがヒープ上の何かを変更した場合、元に戻されないため、正確にステップバックしません。


1
Chrononでは、それをリアルタイムで行うことができますか?私の理解では、最初にクロノンを使用してセッションを記録する必要があり、それからそのセッションに戻ることができます。アプリケーションを再起動するのと同じくらい良いのではないですか?それとも私が何かをしないのです...
Raam

2
はい、あなたは最初にあなたのアプリケーションを記録する必要があり、それからいつでも記録からそれをデバッグすることができます。バグを再現するためにすべての手順を実行する必要がないため、アプリケーションの再起動とは異なります。バグを1回記録するだけで、記録だけを使用してデバッグしたいときにいつでも確認できます。記録を再生するために、元の環境の一部は必要ありません。
pdeva

ChrononはDocker環境で動作しますか?私ecliseは、ローカル上にありません...
チェ・

3

私は日食でもこの機能を探していました。ビジュアルスタジオでできることは知っています。実際には、現在の行マーカーをドラッグして、コードのどこにでもドロップできます。変数の変更を元に戻すことができるかどうかは、私にはよくわかりません。しかし、それでもそれでも非常に便利で、多くの時間を節約できます。私はこれを非常に長い日食で待っていました。


1

質問はEclipse言語を指定しておらず、回答の多くはJavaを想定しています。

GDBデバッガーでC ++およびGCCを使用する場合、EclipseはRun->Move to LineVisual StudioのSet Next Statementのように機能し、機能します。この場合、EclipseはGDBにある機能を使用しています。

Javaを使用している場合、EclipseやNetbeansでJavaを使用する方法はわかりませんが、他の回答ではプラグインが提案されています。Eclipseには、私のバージョン(Juno SR1)のJavaで機能する「フレームにドロップ」コマンドがあります。デバッグモードで関数内のコードを変更して保存すると、実行行が自動的に現在の関数の先頭に移動し、そこから続行できます。行を指定するのと同じではありませんが、それは何かです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.