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

  • 相关阅读:
    .Net几大优点
    小谈.NET下的缓存。
    ASP.NET 防盗链的实现[HttpHandler]
    给网页加个个性的图标
    四个字节整型转换为IP格式
    在 ASP.NET MVC 中使用带后缀的 URL
    Visual Studio 2008 安装 SP1 后智能提示变英语的修补程序 (KB957507)
    Visual Studio 2008 SP1 安装失败的解决方法
    关于0x0d和0x0a回车换行\r和\n
    图像处理工程师的要求
  • 原文地址:https://www.cnblogs.com/yilang/p/12010099.html
Copyright © 2020-2023  润新知