Debugging C++ Applications Using HP WDB (766162-001, March 2014)
Example 14 Sample Program for Debugging a Virtual Function
1 #include <stdio.h>
2
3 struct BaseElement {
4 int baseElementMember;
5 virtual void get();
6 };
7
8 void BaseElement::get(void) {
9 printf("%d\n",baseElementMember);
10 }
11
12 struct DerivedElement : BaseElement {
13 int derivedElementMember;
14 void get();
15 };
16
17 void DerivedElement::get() {
18 printf("%d\n",derivedElementMember);
19 }
20
21 void foo(struct BaseElement * p1, struct BaseElement * p2) {
22 p1->get();
23 p2->get();
24 }
25
26 int main() {
27 BaseElement b;
28 DerivedElement d;
29 b.baseElementMember = 2;
30 d.baseElementMember = 3; d.derivedElementMember = 4;
31 foo(&b, &d);
32 return 0;
33 }
The WDB output snippet for this program is as shown below:
(gdb)
31 foo(&b, &d);
(gdb) call b.get()
2
(gdb) call d.get()
4
(gdb) s
foo (p1=0x7ffff040, p2=0x7ffff050) at rtti.C:22
22 p1->get();
(gdb) call p1->get()
2
(gdb) call p2->get()
4
(gdb) ptype p1->get
type = void (struct BaseElement * const)
(gdb) ptype p2->get
type = void (struct BaseElement * const)
(gdb) b BaseElement::get()
Resolving ambiguous references to overloaded functions
A function name func can be overloaded by declaring more than one function with the same
name func in the same scope. These declarations must differ from each other by the type and/or
number of arguments in the argument list. When an overloaded function func is called, the
appropriate function is selected depending on the argument list specified. In HP WDB, you can
24