ID: Q73834
1.00 | 1.00 MS-DOS | OS/2 kbtool
The information in this article applies to:
The information in this article is included in the documentation starting with Visual C++ 5.0. Look there for future revisions.
Code assembled with the Microsoft Macro Assembler (MASM) version 5.1 or 5.1a may not produce sufficient symbols for the Source Profiler to produce reports based on functions. This is not a problem in the Profiler; it is a limitation of the CodeView symbolic debugging information generated by MASM 5.1 and 5.1a where PROC names are not placed in the symbol table under certain circumstances.
This behavior only affects profiling by function. Profiling by line and sampling is not affected.
When a PROC name is not placed in the CodeView symbol table, the Profiler is unable to profile it by function and the PROC name will not show up in the Profiler report. When this occurs, a valid workaround is to place a local variable in the function so that the symbol is properly recorded. This will add some minor code to that function, so it is not advisable to leave the variable declaration in the final version of the program, but it may be useful for the profiling stage of development.
The example code below demonstrates this behavior. The example is a C program calling two functions in an assembly module. The first assembly function is not visible to the profiler, while the second has the added code in it to make it visible.
Compile and assemble the source modules as indicated (you must assemble with MASM 5.1 or 5.1a to demonstrate the problem). Link the resulting .OBJs with the /CO option. Profile the .EXE with /FC, /FT, or /FV and observe how asmfunc1 is missing from the Profiler output.
/* Compile options needed: /AL /Zi /Od /c
*/
#include <stdio.h>
extern int i, j;
extern void asmfunc1(int);
extern void asmfunc2(int);
void main( void)
{
i = 1;
j = 1;
printf( "Before ASM calls, i = %d, j = %d\n", i, j);
asmfunc1( i );
asmfunc2( j );
printf( "After ASM calls, i = %d, j = %d\n", i, j);
}
; Assemble options needed: /Zi
.model large,c
.data
PUBLIC i, j
i dw ?
j dw ?
.code
PUBLIC asmfunc1
PUBLIC asmfunc2
asmfunc1 PROC FAR
mov i,2 ; change i to the value 2
ret
asmfunc1 ENDP
asmfunc2 PROC FAR
local dummy_arg:word ; Declare a dummy arg as a workaround
mov j,2 ; change j to the value 2
ret
asmfunc2 ENDP
END
KBCategory: kbtool KBSubcategory: TlsMisc Additional reference words: 1.00
Keywords : kbcode kb16bitonly TlsMisc
Version : 1.00 | 1.00
Platform : MS-DOS OS/2
Last Reviewed: May 22, 1998