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

  • 相关阅读:
    mysql导入导出数据
    Linux符号连接的层数过多
    win10下docker安装和配置镜像仓库
    PHP资源列表(转)
    php中正则案例分析
    基于CSS3自定义美化复选框Checkbox组合
    基于HTML5 Canvas粒子效果文字动画特效
    基于jQuery商品分类选择提交表单代码
    基于jquery右侧悬浮加入购物车代码
    基于jquery带时间轴的图片轮播切换代码
  • 原文地址:https://www.cnblogs.com/yilang/p/12010099.html
Copyright © 2020-2023  润新知