在WinDbg中調試時如何查看類/結構對象成員的值


有時,當您調試應用程序時,會碰巧得到指向類的指針,該類只有幾個成員變量,包括結構和其他類對象!如何看待內部類/結構變量成員的值??所以,這是提示。
下面是用於演示命令的代碼。

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”。這就是我們如何在這個結構中找到成員的方法。任務完成了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM