有時,當您調試應用程序時,會碰巧得到指向類的指針,該類只有幾個成員變量,包括結構和其他類對象!如何看待內部類/結構變量成員的值??所以,這是提示。
下面是用於演示命令的代碼。
struct testStruct { int i; char ch; long l; char* str; }; class myClass2 { public: myClass2(); ~myClass2(); testStruct structObj; }; myClass2::myClass2() { //Do Nothing.. char *pStr = new char[100]; sprintf(pStr, "Test Message"); structObj.i = 101; structObj.l = 1001; structObj.ch = 'j'; structObj.str = pStr; } myClass2::~myClass2() { delete structObj.str; } int test2(myClass2* classObject) { return classObject->structObj.i; } void CWinDbgDlg::OnBnClickedButton2() { // TODO: Add your control notification handler code here myClass2 *ptr = new myClass2(); int retVal = test2(ptr); }
所以,我們想做的是,當我們中斷@test2函數時,我們想在WinDbg中看到該實例的structObj.str的值。
以下是需要在Windbg中完成的步驟。將進程附加到WinDbg,通過放置簡單斷點中斷函數test2。點擊kb命令找出test2函數的第一個參數(它是指向myClass2類對象的指針)。
函數test2的第一個參數是0x006ab520(請參閱上面調用堆棧第一行的第三列)。如您所知,如果您想查看類對象指針的成員變量,可以使用dt命令。
但是,我們的目標是找出structObj里面的東西!好吧,你可以用下面的命令來獲取細節,
注意最后一個命令和之前一個命令的區別。我們在最后加上“structObj”。這就是我們如何在這個結構中找到成員的方法。任務完成了!