2013-02-06 128 views
-2

我有一個C++程序有兩個版本,其中一個版本的功能正在工作,但另一個版本不是。 有沒有辦法調試這兩個版本之間的區別?具體來說,我使用Linux和g ++。有沒有辦法使用像KCachegrind這樣的東西來查看呼叫圖的區別?或者是在gdb中以更快的方式查看這些函數調用差異?兩個C++程序之間的區別

正在更新... 該計劃是爲了查看所有的差異。首先,我想知道函數調用之間的差異,之後,我將有一個選項可以在這個函數中執行diff命令。

+3

難道你不能使用你的版本控制工具來區分源代碼嗎? – Johnsyweb

+1

如果你不能通過查看源代碼來區分差異,你可能應該重新開始;-) – stefan

+0

@stefan你是正確的,但我沒有這個選項。 – Mauro

回答

1

你有沒有使用gprof的考慮?一旦你安裝了它(我相信大多數專業發行版都默認使用它),用'-pg'選項編譯你的代碼。運行可執行文件時,它將生成一個gmon.out文件,其中包含分析信息,包括調用圖。

查看this tutorial可以更好地瞭解它是如何工作的。

2

我會推薦的是寫最簡單的工作測試輸入,導致新版本失敗,但成功與以前的版本。一旦你有了這個測試用例,從你的源代碼庫中的不同中間提交中建立中間版本(我建議做一個二進制搜索來限制重新編譯的次數,如果你碰巧使用gitgit bisect是一個很好的工具)。

一旦你隔離了違規提交,仔細查看它,或者必要時使用調試器來跟蹤你的代碼和測試輸入。有希望的是,你應該以相對小的改變來驗證。

+0

這是正確的,我通常使用這種方法,但是這個代碼沒有存儲庫,所以git bisect沒用。我只有兩個源代碼,每個版本都有一個源代碼,在這兩個版本之間沒有控制權。 – Mauro

1

你會得到這個用gdb使用多進程調試最接近[1] 有一些自定義的GDB和Python腳本,有以這種方式用gdb的至少一個這樣的例子[2]

我認爲它不太可能按照你想要的方式工作。雖然如果你決定以這種方式使用gdb,它可能會給你一些想法。

[1] http://sourceware.org/gdb/current/onlinedocs/gdb/Inferiors-and-Programs.html#Inferiors-and-Programs

[2] http://gitorious.org/misc-gdb-stuff/misc-gdb-stuff/trees/master/misc_gdb/lockstep