
The sample EVAL command for displaying C++ constructs presented in Figure 77 is based on the source shown in the following figure:
Figure 82. Source for Sample EVAL Commands for Displaying C++ Constructs
// Program demonstrates the EVAL debug command
class A {
public:
union {
int a;
int ua;
};
int ac;
int amb;
int not_amb;
};
class B {
public:
int b;
};
class C {
public:
int ac;
static int c;
int amb;
int not_amb;
};
int C::c = 45;
template <class T> class E : public A, public virtual B {
public:
T e;
};
class D : public C, public virtual B {
public:
int d;
};
class outter {
public:
static int static_i;
class F : public E<int>, public D {
public:
int f;
int not_amb;
void funct();
} inobj;
};
int outter :: static_i = 45;
int VAR = 2;
void outter::F::funct()
{
int local;
a=1; //EVAL VAR : Is VAR in global scope
b=2;
c=3;
d=4;
e=5;
f=6;
local = 828;
int VAR;
VAR=1;
static_i=10;
A::ac=12;
C::ac=13;
not_amb=32;
not_amb=13;
// Stop here and show:
// EVAL VAR : is VAR in local scope
// EVAL ::VAR : is VAR in global scope
// EVAL %LOCALVARS : see all local vars
// EVAL *this : fields of derived class
// EVAL this->f : show member f
// EVAL f : in derived class
// EVAL a : in base class
// EVAL b : in Virtual Base class
// EVAL c : static member
// EVAL static_i : static var made visible
: by middle-end
// EVAL au : anonymous union members
// EVAL a=49 :
// EVAL au
// EVAL ac : show ambigous var
// EVAL A::ac : disambig with scope op
// EVAL B::ac : Scope op
// EVAL E<int>::ac : Scope op
// EVAL this : notice pointer values
// EVAL (E<int>*)this : change
// EVAL (class D *)this : class is optional
// EVAL *(E<int> *)this : show fields
// EVAL *(D *) this : show fields
}
int main()
{
outter obj;
int outter::F::*mptr = &outter::F::b;
int i;
int& r = i;
obj.inobj.funct();
i = 777;
obj.static_i = 2;
// Stop here
// EVAL obj.inobj.*mptr : member ptr
// EVAL obj.inobj.b
// EVAL i
// EVAL r
// EVAL r=1
// EVAL i
// EVAL (A &) (obj.inobj) : reference cast
// EVAL
}
|
(C) Copyright IBM Corporation 1992, 2005. All Rights Reserved.