簡體   English   中英

如何退回 Eclipse 調試器?

[英]How to step back in Eclipse debugger?

是否可以在 Eclipse 調試器中進行反向執行? 我正在處理的當前項目需要至少 5 秒才能從文件讀取和初始化數據,然后才能完成任何操作。 如果我在調試器中越級,我必須終止程序並重新啟動,這需要相當長的時間。

您可以使用 Eclipse 的drop to frame命令從頂部重新輸入當前方法。 但是它不會展開已經發生的任何狀態更改,因此它可能無法工作,具體取決於您使用的方法類型。

另一個非常酷的工具是Omniscient Debugger 它通過在類加載器中加載類時對其進行檢測來工作,因此它可以記錄您的代碼所做的一切。 它可以做很酷的事情,比如回答“這個字段在何時、何地以及為什么被分配其當前值?”。 UI 相當笨重,處理大型代碼庫可能會很困難,但在某些情況下,它確實可以節省大量時間。

更新Chronon提供了一個商業產品,它被描述為“Java DVR”,它似乎做很多與 ODB 相同的事情。

除了前面的答案中提到的內容之外 - 即 Eclipse 在調試視圖中的 drop to frame 功能,它在堆棧幀中更早地重新啟動調試(但不恢復全局/靜態數據)和Omniscient debugger ,這有點原始而不是那么多不斷發展 - 有一些基於 Eclipse 的工具可用於在(運行)時“返回”:

JIVE 擴展了 Eclipse Java 調試器,使其能夠記錄程序狀態。 JIVE 透視圖提供了一些有用的 UML 圖,這些圖在程序運行時更新。 這些圖提供了應用程序狀態(對象圖)和堆棧跟蹤(序列圖)的概覽。 您可以查詢記憶的軌跡並及時退步和查看相應的圖表。

Diver 只記錄方法調用,並沒有像 JIVE 那樣真正記錄程序狀態。 每個方法調用事件都被存儲起來供以后檢索和分析。 它擴展了 Java Run 和 Debug 配置,主要用於指定過濾器。 跟蹤可以在運行時暫停/恢復/過濾。 記錄后,Diver 透視圖可以將其顯示在交互式序列圖中。

JIVE 和 Diver 是由學術研究發布的開源項目。 截至 2012 年 11 月,這兩個項目都處於活動狀態。

Chronon 是一種商業產品,但他們為學生和開源項目提供免費許可證。 從他們網站上聲稱的內容來看,它可能是最全面的記錄器,因為它能夠重放記錄的歷史,來回走動,正如他們所說的那樣進行時間旅行調試。 錄制也不需要 Eclipse。

所有這些插件在資源上都非常貪婪,所以最好有一個好的規格機器並使用它們的過濾器功能。 成功運行它們的一個明確要求是擴展 eclipse.ini 中的堆空間

就我而言,我曾嘗試使用 JIVE 和 Diver 來調試 XML 解析程序,但由於缺乏資源,最終總是凍結 eclipse。 Diver 在 64 位 linux 上運行可能很棘手,它可以使用這些技巧在 ubuntu 32 位和可能的其他 32 位發行版上運行。 Diver 在 Windows 上工作,在 Windows 64bit + 64bit JVM 上更好,否則你將被限制在 32bit windows 上最大堆空間為 1.3-1.6Gb JIVE 在我的 64 位 linux 上運行良好,在其他平台上似乎也運行良好。

是的,Eclipse CDT 支持歷史調試器功能。

打開Debug Configuration -> Debugger -> Enable Reverse Debugging at startup

比您可以按shift+F5shift+F6后退,如F5F6前進。

我有偏見,但Chronon正是您正在尋找的。

Drop to Frame 並不是完全退步,因為如果該方法更改了堆上的任何內容,它就不會被還原。

我也在 eclipse 中尋找這個功能。 我知道視覺工作室可以做到這一點。 實際上,您可以拖動當前行標記並將其放回代碼中的任何位置。 我不太確定是否可以撤消對變量的更改。 但即便如此,它仍然非常有用,並且可以節省大量時間。 我一直在 eclipse 中等待這個很長時間。

該問題沒有指定 Eclipse 語言,許多答案都假定為 Java。

如果將 C++ 和 GCC 與 GDB 調試器一起使用,Eclipse 有Run->Move to Line來完成工作和像 Visual Studio Set Next Statement一樣的功能。 在這種情況下,Eclipse 使用的是 GDB 中的功能。

如果使用 Java,我不知道使用 Eclipse 或 Netbeans 的方法,盡管其他答案建議使用插件。 Eclipse 確實具有適用於我的版本 (Juno SR1) 中的 Java 的“drop to frame”命令。 如果我在調試模式下修改和保存函數中的代碼,執行行會自動移動到當前函數的頂部,我可以從那里繼續。 與指定行不同,但它是一些東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM