在WinDbg中调试时如何查看类/结构对象成员的值

您所在的位置:网站首页 查看类的实例内存较多 在WinDbg中调试时如何查看类/结构对象成员的值

在WinDbg中调试时如何查看类/结构对象成员的值

2024-05-09 12:24| 来源: 网络整理| 查看: 265

有时,当您调试应用程序时,会碰巧得到指向类的指针,该类只有几个成员变量,包括结构和其他类对象!如何看待内部类/结构变量成员的值??所以,这是提示。下面是用于演示命令的代码。

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3