2010-05-14 142 views
3

在C++時代的某個地方,我製作了一個庫,它啓用了計算曆史記錄的字符串表示。 有一個數學表達式,如:檢測字符串

TScalar Compute(TScalar a, TScalar b, TScalar c) 
{ 
return (a + b) * c; 
} 

我可以使它的字符串表示:

r = Compute(VerbalScalar("a", 1), VerbalScalar("b", 2), VerbalScalar("c", 3)); 
Assert.AreEqual(9, r.Value); 
Assert.AreEqual("(a+b)*c==(1+2)*3", r.History); 

C++運算符重載允許一個簡單類型與複雜的自我跟蹤實體取代度的內部樹表示與物體發生的一切事情。

現在我想對NET字符串有相同的可能性,而不是變量名稱,我希望看到影響字符串的代碼中所有位置的堆棧跟蹤。

我希望它能夠與現有的代碼和現有的編譯程序集一起工作。

另外我希望所有這些都能夠嵌入到Visual Studio調試器中,所以我可以設置一個斷點,並查看與字符串有關的所有事情。

哪種技術會允許這種事情?

我知道它聽起來像是一個烏托邦,但我認爲Visual Studio代碼覆蓋工具實際上在測試程序集時執行相同類型的工作。

回答

1

那麼,有多種技術可以在這裏受益。

一個是建立自己的日誌記錄系統,以跟蹤你所尋求的信息。該信息列表可以通過每個計算函數傳遞,或者「類作用域」變量可以包含該信息。這是一個更自己做的方法。它的水平不低。

如果你想深入挖掘字符串類,有一種方法來反射字符串函數。這個反射系統聲稱它可以連接到一個調試系統(儘管我沒有嘗試過)。您可以嘗試使用TestDriven.NET.NET Reflector。另外,如果您使用的是Visual Studio 2008+ Professional或更高版本,則應該能夠直接調試到.NET框架本身。這將讓你看到發生了什麼事情的字符串。

如果我誤解了你正在尋找的問題或信息,請讓我知道。我會盡我所能協助。