2013-12-22 74 views
0

更改當前不可用類實現我有一個C++代碼是一個大文件(〜15 GB)執行。代碼有兩個階段,第一階段需要很長時間才能完成。但與此同時,我在第二階段獲得了更好的實施技術,並且不希望從頭開始重新啓動整個執行。這兩個階段按實際使用的兩個類別進行分類。從它取了一個想法:在運行時

Parser.parse(filePath); // phase one 
Processor.processAndLog(); // phase two 

那麼,有沒有改變處理器類的實現它開始執行之前的一些方法?第一階段的結束(或甚至已完成多少)可以與我打印的一些時間消息(如日誌)區分開來。

+0

好,如果有一些,不建議 –

+0

如果您提及他們來說,這將是有幫助的。 –

+0

二進制修改orfer中的可執行文件以攔截錯誤的調用並調用其他的東西。 –

回答

0

如果Processor.processAndLog是一個成員函數指針比你可以隨時改變它,它被稱爲前。

一種替代方法是有Processor.processAndLog是用於其他功能的包裝函數 - 一個調度函數。

還有掛鉤函數的問題。有一個名爲detours的圖書館。只有在程序不能更改源代碼的情況下,才能使用它。

0

所以,如果我理解正確的:你有一個正在運行的程序,但還未得到在一個特定的類執行代碼。並且您想要找到一種方法來更新它,以便在不停止程序的情況下使用該類的新版本代碼。

理論上可以做。但實際上,這可能比它的價值更麻煩,特別是如果這是一次性需求。 C++不是爲這種事情設計的。這並不是說只有人類可讀的源代碼位於進程內存中,可以輕鬆覆蓋。

正確地這樣做幾乎肯定會需要大量的時間和精力顯著量,最有可能涉及到很多實驗和線索和錯誤的。如果你得到一些關於它錯了(這很可能是第一次),那麼你可能只是損壞了過程和你的結果,因而需要無論如何重新啓動它。

我不知道你的過程有多長目前正在服用的,但試圖找出如何做到這一點的想法很可能會花費更多的時間不僅僅是重新啓動建設程序的新版本之後的工藝。