在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”。这就是我们如何在这个结构中找到成员的方法。任务完成了!
为虫子生,为虫子死,为虫子奋斗一辈子