【问题标题】:WinDBG conditional breakpoints on member of a class pointer value类指针值成员上的 WinDBG 条件断点
【发布时间】:2018-05-04 22:50:46
【问题描述】:

尝试为类成员设置断点,但出现语法错误或错误提示“无法解析”。

目标变量是类指针xyz的abc。

0:000> ??@@c++(xyz->abc)
short 0n812

0:000> dt xyz
Local var @ rbx Type Prop*
   +0x000 __VFN_table : 0x00007ffd`b9229510 
   +0x058 abc          : 0n0147

尝试:

0:000> bu ***!***::function+0x56 ".if (@@c++(xyz->abc))==147) {.echo 'hit'} .else {gc}"

^ Syntax error in '.if ....'

我想在 pProp->ydu 值等于 147 时设置断点。

【问题讨论】:

  • 你缺少一个括号,它看起来是一个错字吗?

标签: windbg


【解决方案1】:

来源

#include <iostream>
using namespace std;
class Rectangle {
    int width, height;
  public:
    Rectangle (int x ,int y) : width(x) , height(y) {} 
    int area (void) {return (width*height);}
};
void CalcArea(int i,int j,Rectangle *rect) {
    cout << "Area for Rect("<<i<<","<<j<<") = "<<rect->area()<< endl;
}       
int main () {
    int i,j; 
    for(i=10,j=10; (i<100 && j<100); i+=5,j+=10){
        Rectangle rect (i,j);
        CalcArea(i,j,&rect);        
    }
  return 0;
}

使用 vs 2017 社区 cmd 提示编译

cl /EHsc /W4 /analyze /Zi /Od classy.cpp /link /release

执行

classy.exe
Area for Rect(10,10) = 100
Area for Rect(15,20) = 300
Area for Rect(20,30) = 600
Area for Rect(25,40) = 1000
Area for Rect(30,50) = 1500
Area for Rect(35,60) = 2100
Area for Rect(40,70) = 2800
Area for Rect(45,80) = 3600
Area for Rect(50,90) = 4500

在windbg中加载并设置条件断点并运行

:\>cdb classy.exe
Microsoft (R) Windows Debugger Version 10.0.16299.15 X86

0:000> bu classy!CalcArea ".if(((@@c++(rect->width))==0n40)){ .echo \"hit\" } .else{gc}"

0:000> bl
 0 e 00841100     0001 (0001)  0:**** 
classy!CalcArea ".if(  ((@@c++(rect->width))==0n40)  ) { .echo \"hit\" } .else {gc}"

0:000> g

Area for Rect(10,10) = 100
Area for Rect(15,20) = 300
Area for Rect(20,30) = 600
Area for Rect(25,40) = 1000
Area for Rect(30,50) = 1500
Area for Rect(35,60) = 2100
hit <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
eax=00000028 ebx=7ffdf000 ecx=002dff08 edx=00000046 esi=008c9bf0 edi=000d8b28
eip=00841100 esp=002dfef8 ebp=002dff18 iopl=0         nv up ei ng nz na pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000287
classy!CalcArea:
00841100 55              push    ebp


0:000> ?? rect
class Rectangle * 0x002dff08
   +0x000 width            : 0n40  <<<<<<<<<<<<<<<
   +0x004 height           : 0n70
0:000>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多