Article: Q240626
Product(s): Microsoft C Compiler
Version(s): winnt:6.0
Operating System(s):
Keyword(s): kbCodeGen kbCompiler kbDebug kbVC600bug
Last Modified: 07-MAY-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- 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
========
While using #line digit-sequence "filename" with Visual C++ 6.0, extra lines may
be generated in assembly code. Hence, you may need to press F10 multiple times
while debugging to go to the next executable line.
CAUSE
=====
Extra lines are generated for the #line directive.
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
---------------------------
Compile Main.cpp:
/*******************************************
Main.cpp file
Uses #line directives.
******************************************/
#include <stdio.h>
#line 1 "thetestfile"
void main() {
#line 1 "thetestfile"
int xx = 1;
#line 1 "thetestfile"
#line 1 "thetestfile"
if (xx == 1) {
#line 1 "thetestfile"
printf("hello1\n");
#line 1 "thetestfile"
++xx;
#line 1 "thetestfile"
}
#line 1 "thetestfile"
if (xx == 2) {
#line 2 "thetestfile"
int r = 0;
#line 2 "thetestfile"
printf("hello2\n");
#line 2 "thetestfile"
}
#line 2 "thetestfile"
#line 3 "thetestfile"
if (xx == 2) {
#line 3 "thetestfile"
int r = 0;
#line 3 "thetestfile"
printf("hello3\n");
#line 3 "thetestfile"
}
#line 3 "thetestfile"
}
Create a text file named thetestfile, and add the following lines to the file:
line 1 : Write hello1 on console
line 2 : Write hello2 on console
line 3 : Write hello3 on console
The following is the generated assembly code:
1: line 1 : Write hello1 on console
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,4Ch
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-4Ch]
0040101C mov ecx,13h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
00401028 mov dword ptr [ebp-4],1
0040102F cmp dword ptr [ebp-4],1
00401033 jne main+3Bh (0040104b)
00401035 push offset string "hello1\n" (00420034)
0040103A call printf (004010b0)
0040103F add esp,4
00401042 mov eax,dword ptr [ebp-4]
00401045 add eax,1
00401048 mov dword ptr [ebp-4],eax
3: line 3 : Write hello3 on console
0040104B cmp dword ptr [ebp-4],2
0040104F jne main+55h (00401065)
2: line 2 : Write hello2 on console
00401051 mov dword ptr [r],0
2: line 2 : Write hello2 on console
00401058 push offset string "hello2\n" (00420028)
0040105D call printf (004010b0)
00401062 add esp,4
3: line 3 : Write hello3 on console
00401065 cmp dword ptr [ebp-4],2
00401069 jne main+6Fh (0040107f)
3: line 3 : Write hello3 on console
0040106B mov dword ptr [r],0
3: line 3 : Write hello3 on console
00401072 push offset string "hello3\n" (0042001c)
00401077 call printf (004010b0)
0040107C add esp,4
4:
0040107F pop edi
00401080 pop esi
00401081 pop ebx
00401082 add esp,4Ch
00401085 cmp ebp,esp
00401087 call __chkesp (00401130)
0040108C mov esp,ebp
0040108E pop ebp
0040108F ret
Extra lines are generated for line 2 and line 3 directives. As a result, you need
to press F10 multiple times for line 2 and line 3 while debugging.
Additional query words: #line directive extra line F10
======================================================================
Keywords : kbCodeGen kbCompiler kbDebug kbVC600bug
Technology : kbVCsearch kbAudDeveloper kbVC600 kbVC32bitSearch
Version : winnt:6.0
Issue type : kbbug
=============================================================================