Article: Q168380
Product(s): Microsoft C Compiler
Version(s): winnt:4.0,4.1,4.2,5.0,6.0
Operating System(s):
Keyword(s): kbtool kbDebug kbide kbVC400bug kbVC410bug kbVC420bug kbVC500bug kbvfp600bug
Last Modified: 06-MAY-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- The Integrated Debugger, used with:
- Microsoft Visual C++, 32-bit Editions, versions 4.0, 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition, version 4.2
- Microsoft Visual C++, 32-bit Professional Edition, version 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition, version 5.0
- Microsoft Visual C++, 32-bit Professional Edition, version 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition, version 6.0
- Microsoft Visual C++, 32-bit Professional Edition, version 6.0
- Microsoft Visual C++, 32-bit Learning Edition, version 6.0
-------------------------------------------------------------------------------
SYMPTOMS
========
Function evaluation of static member functions cannot be done in the Watch or
the QuickWatch window of the debugger. You a wrong value, or get the following
error message:
Error:cannot display value
CAUSE
=====
The expression evaluator in the debugger does not properly distinguish between
static and non-static methods. The first case listed above appears to be an
evaluation of a method without a "this" pointer, hence, we get an "Error:cannot
display value" message. The second case occurs because the debugger is not
properly distinguishing between static and non-static member functions. The
"this" pointer is pushed onto the stack to evaluate the static member function,
which is incorrect.
RESOLUTION
==========
There is no workaround. Do not attempt to evaluate static member functions from
within the debugger, either in the watch or quick watch window.
STATUS
======
Microsoft has confirmed this to be a bug in the Microsoft products listed at the
beginning of this article.
MORE INFORMATION
================
Steps to Reproduce Behavior
---------------------------
Use the following sample code and build it with debug information:
class A
{
public:
static int bar (int i) {return i;}
};
void main ()
{
A f;
int j = A::bar(200);
int i = f.bar(100);
}
Start the debugger by stepping into (F11 key) function "main." In the Watch or
QuickWatch window, type A::bar(200) and you will get the error message described
in the SYMPTOMS section. Typing f.bar(100) produces a wrong value.
Additional query words:
======================================================================
Keywords : kbtool kbDebug kbide kbVC400bug kbVC410bug kbVC420bug kbVC500bug kbvfp600bug
Technology : kbVCsearch kbAudDeveloper kbIntegratedDebugger
Version : winnt:4.0,4.1,4.2,5.0,6.0
Issue type : kbbug
=============================================================================