2012-10-23 53 views
2

比方說,我已經對整體變量的幾個「基本」的算法,如程序:是否有一個記錄代碼執行的工具?

if(a<b) 
    a += c; 

是否有一個工具,讓我自動登錄在運行不同的變量所做的所有更改時間?

例如它會在一個日誌文件的情況下顯示:

"condition passed because 5=a < b=10 
    a += 10; because c=10" 

或某些等效。

我知道我可以手動記錄每個操作,但是這將是過於複雜。 有什麼工具可以讓我做這樣的事嗎?我不關心重構/重新編譯,只要它不是完全手動的。

+0

你看到這個題目:http://stackoverflow.com/questions/7468576/c-macro-to-log-every-line-of-code?rq=1 –

回答

1

您可以編寫自己的整數類,因此重載運算符(帶有自動記錄)。如果類還提供了隱式轉換(一個構造函數從int和一個轉換運算符到int),那麼您「僅」需要更改變量和參數的類型,以便自動記錄。但是不是名字,你只能記錄地址(或者從var20中派生出來的東西)。在#define的幫助下,您可以輕鬆地在原始整數(不記錄日誌)或整數類之間進行切換。

也得到變量入日誌的名字一個要麼與宏改寫運營商如

if (LESS(a,b)) 
    INC(a,c) 

或有一個解析器,自動將您的密碼弄成這個樣子。但我不知道任何現有的工具提供這一點。

0

我很難想象,記錄像這樣的程序的完整執行會很有用。一個簡單的std::cout << "hello, world!\n";會產生大量無用的日誌。

你究竟需要做什麼?如果你想調試代碼,你可能應該使用調試器來檢查運行的程序,而不是使用printf-debugging-gone-horribly-wrong策略。如果您想要一種方式來描述完整的執行以供稍後檢查/操作,您可以確保程序的行爲是確定性的,並保存程序輸入。

正確的解決方案取決於實際問題,但完全執行日誌不可能是任何事情的正確解決方案。

相關問題