2013-01-04 29 views
3

最近,我開始在C++中使用reverse debugging with gdb,它對於某些類型的問題(例如循環和遞歸算法)非常適用。除gdb之外,還有其他用於C/C++的商業調試器(例如,UndoDB)。對C/C++以外的語言進行反向調試

我不知道其他語言是否有很好的可逆調試器? 我對Java和Ruby特別感興趣,但是這個問題對任何語言都是開放的。

我發現的另一種方法是在虛擬機上運行應用程序並連接到它。我知道的唯一實現(但從未測試過)是VMware's Replay Debugging。我不知道它適合哪種類型的調試任務。對於大多數常見問題似乎是過度的,但調試通常很難再現的通信或同步問題可能很有用。

背景資料:

  • 術語 「反向調試」 由GDB使用。然而,也有許多同義詞:
    • 「可逆調試」
    • 微軟稱它的IntelliTrace或「歷史調試」
    • 在Java中,這樣的調試器有時被稱爲一個「Ominiscient調試器」
  • (上programmers.stackexchange)Why is reverse debugging rarely used?
+0

您可以結帳[this](https://www.researchgate.net/profile/Jakob_Engblom/publication/261039109_A_review_of_reverse_debugging/links/54f70fed0cf2ccffe9d9a19b.pdf)查看關於反向調試的論文。 –

回答

1

Jiva權利要求,它可以:

JIVE支持Java程序的正向和反向步進。 ...提供向後退步的能力可以節省程序員重新執行程序的時間和精力,直到出錯點爲止。 JIVE還提供了直接跳回執行歷史記錄中的任何先前點的能力,以便在該點觀察對象圖。

+0

謝謝,我也讀過它。有沒有人用過它? –

+0

@PhilippClaßen我看過這個項目的教程,但是它沒有提供關於反向調試功能的足夠信息。實際上,該工具正在跳轉到對象或線程的歷史記錄中,該對象或線程顯示了您想要查看的程序狀態的元數據,但不能「運行」該程序。它更像是一個程序狀態監視器,但不是反向調試的好工具。 –

0

對不起,這相當遲來的答覆。是的,JIVE的反向步進對調試非常有效。您可以執行或跳回執行歷史記錄中的任何點。

您還可以對執行歷史記錄進行查詢,例如,「顯示x的所有更改」,「x何時首先變爲負數」,「這行代碼是否曾執行過;如果是,哪裏?」等。所有這些都可以通過簡單的基於表單的查詢來完成。

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

0

你可能會對這是由作者膽紅素劉易斯paper審閱爲ODB的Omniscient Debugging看看。 ODB是離線日誌的執行方式重播方式使中的反向調試Java成爲現實。