在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”。这就是我们如何在这个结构中找到成员的方法。任务完成了!

posted on 2019-12-09 11:35  活着的虫子  阅读(2931)  评论(0编辑  收藏  举报

导航